“utf-8”编解码器无法解码位置 18 中的字节 0x92:起始字节无效

2023-12-23

我正在尝试读取名为 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 代码页 1252 https://en.wikipedia.org/wiki/Windows-1252相反,其中 0x92 是一个奇特的引用,:

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

Demo:

>>> 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 似乎只从表面上看 HTTP 标头too当您从 URL 加载数据时,会生成 Mojibake。当我将数据直接保存到磁盘时,then加载它pd.read_csv()数据已正确解码,但从 URL 加载会产生重新编码的数据:

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

这是一个Pandas 中的已知错误 https://github.com/pandas-dev/pandas/issues/10424。您可以使用以下方法解决此问题urllib.request https://docs.python.org/3/library/urllib.request.html#module-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.'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“utf-8”编解码器无法解码位置 18 中的字节 0x92:起始字节无效 的相关文章

随机推荐