StringIO和read_csv pandas的编码错误[英] Encoding errors with StringIO and read_csv pandas

本文是小编为大家收集整理的关于StringIO和read_csv pandas的编码错误的处理方法,想解了StringIO和read_csv pandas的编码错误的问题怎么解决?StringIO和read_csv pandas的编码错误问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在使用 API 来获取一些数据.返回的数据是 Unicode(不是字典/json 对象).

获取数据

data = []
for urls in api_call_list:
    data.append(requests.get(urls))
the data looks like this:

>>> data[0].text
u'Country;Celebrity;Song Volume;CPP;Index\r\nus;Taylor Swift;33100;0.83;0.20\r\n'

>>> data[1].text
u'Country;Celebrity;Song Volume;CPP;Index\r\nus;Rihanna;28100;0.76;0.33\r\n'

我使用此代码将其转换为数据框:

from io import StringIO     
import pandas as pd

pd.concat([pd.read_csv(StringIO(d.text), sep = ";") for d in data])

工作正常,除非结果中包含非英文字符,特别是韩文、中文或日文.它完全使他们乱码.我尝试将编码参数添加到 read_csv,并将 utf_8、cp1252 和 iso-8859-1 作为值.这些都不起作用.

我应该如何正确读取这些数据?

推荐答案

经过一番分析研究,我能够确定问题所在.API 返回的 unicode 已解码或没有正确的编码,但可以设置.所以我所做的是添加一行来设置来自请求的有效负载的编码.

data = []
for urls in api_call_list:
    r = requests.get(urls)
    r.encoding = 'utf-8'
    data.append(r)

然后将编码参数添加到 read_csv :

pd.concat([pd.read_csv(StringIO(d.text), sep = ";", encoding='utf-8') for d in data])

设置正确.文档在这里:http://docs.python-requests.org/zh/master/user/quickstart/

本文地址:https://www.itbaoku.cn/post/1727778.html