我试图读入一个名为df1的数据集,但它不起作用

import pandas as pd
df1=pd.read_csv("https://raw.githubusercontent.com/tuyenhavan/Statistics/Dataset/World_Life_Expectancy.csv",sep=";")

df1.head()

下面是上面代码中的巨大错误,但这是最相关的

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 18: invalid start byte

推荐答案

数据确实没有编码为UTF-8;除了一个0x92字节外,所有内容都是ASCII:

b'Korea, Dem. People\x92s Rep.'

将其解码为Windows codepage 1252,其中0x92是一个花哨的引号,:

df1 = pd.read_csv("https://raw.githubusercontent.com/tuyenhavan/Statistics/Dataset/World_Life_Expectancy.csv",
                  sep=";", encoding='cp1252')

演示:

>>> import pandas as pd
>>> df1 = pd.read_csv("https://raw.githubusercontent.com/tuyenhavan/Statistics/Dataset/World_Life_Expectancy.csv",
...                   sep=";", encoding='cp1252')
>>> df1.head()
                   2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  \
0     Afghanistan  55.1  55.5  55.9  56.2  56.6  57.0  57.4  57.8  58.2  58.6
1         Albania  74.3  74.7  75.2  75.5  75.8  76.1  76.3  76.5  76.7  76.8
2         Algeria  70.2  70.6  71.0  71.4  71.8  72.2  72.6  72.9  73.2  73.5
3  American Samoa    ..    ..    ..    ..    ..    ..    ..    ..    ..    ..
4         Andorra    ..    ..    ..    ..    ..    ..    ..    ..    ..    ..

   2010  2011  2012  2013  Unnamed: 15  2014  2015
0  59.0  59.3  59.7  60.0          NaN  60.4  60.7
1  77.0  77.2  77.4  77.6          NaN  77.8  78.0
2  73.8  74.1  74.3  74.6          NaN  74.8  75.0
3    ..    ..    ..    ..          NaN    ..    ..
4    ..    ..    ..    ..          NaN    ..    ..

然而,我注意到,Pandas似乎以面值too接受HTTP头,并在从URL加载数据时生成Mojibake.当我将数据直接保存到磁盘时,thenpd.read_csv()加载数据.数据被正确解码,但从URL加载会产生重新编码的数据:

>>> df1[' '][102]
'Korea, Dem. People’s Rep.'
>>> df1[' '][102].encode('cp1252').decode('utf8')
'Korea, Dem. People’s Rep.'

这是known bug in Pandas美元.您可以通过使用urllib.request加载URL并将其传递给pd.read_csv()来解决这个问题:

>>> import urllib.request
>>> with urllib.request.urlopen("https://raw.githubusercontent.com/tuyenhavan/Statistics/Dataset/World_Life_Expectancy.csv") as resp:
...     df1 = pd.read_csv(resp, sep=";", encoding='cp1252')
...
>>> df1[' '][102]
'Korea, Dem. People’s Rep.'

Python-3.x相关问答推荐

为什么我必须在绘制椭圆时代码等于两次?''

我有个问题继承遗产合伙人

为什么打印语句在Python多处理脚本中执行两次?

Pyvis和Networkx:如何根据源或目标使 node colored颜色 不同

Django中自动设置/更新字段

如何创建与导航抽屉一起使用的导航栏

如果集合大于 len(x),则 pandas 在重复的行中拆分集合列

无法理解此递归函数的分配和环境用法

使用 Python 在特定组的列中设置上限

如何知道Pandas 列中的每个后续值是否都大于前面的值? Python相关

将字典列表展平为数据框列

内部如何使用 Python 语法?

python 3.7 websockets的1006连接异常关闭错误

Python 类型提示语法如何/为什么起作用?

Python中调用者函数的访问变量

如何将 cv2.imread 匹配到 keras image.img_load 输出

如何模拟 open(...).write() 而不会出现没有这样的文件或目录错误?

类方法和实例方法同名

当 None 被传递时,如何将默认值应用于 python 数据类字段?

为什么某些代码在 Python2 中是确定性的,而在 Python 3 中是非确定性的?