Python 将数据集从网页读入数据帧时出现UnicodeDecodeError

Python 将数据集从网页读入数据帧时出现UnicodeDecodeError,python,pandas,parsing,Python,Pandas,Parsing,我正试图用Python将复制到熊猫数据帧中。 movies = pd.read_csv('http://files.grouplens.org/datasets/movielens/ml-100k/u.item', sep='|', names = ['movie_id', 'title'], usecols = range(2)) movies.head() 但是,当我执行上述操作时,会出现以下错误。 movies = pd.read_csv('http://files.grouplens.

我正试图用Python将复制到熊猫数据帧中。

movies = pd.read_csv('http://files.grouplens.org/datasets/movielens/ml-100k/u.item', sep='|', names = ['movie_id', 'title'], usecols = range(2))
movies.head()
但是,当我执行上述操作时,会出现以下错误。

movies = pd.read_csv('http://files.grouplens.org/datasets/movielens/ml-100k/u.item', sep='|', names = ['movie_id', 'title'], usecols = range(2))
movies.head()

UnicodeDecodeError回溯(最近一次呼叫最后一次) pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader._convert_tokens()

pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader._convert_与_dtype()

pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader._string_convert()

pandas/_libs/parsers.pyx在pandas中。_libs.parsers._string_box_utf8()

UnicodeDecodeError:“utf-8”编解码器无法解码位置3中的字节0xe9:无效的连续字节

在处理上述异常期间,发生了另一个异常:

UnicodeDecodeError回溯(最近一次呼叫最后一次) 在() 8. 9 --->10部电影=pd.read_csv(“”,sep='|',names=['movie_id','title'],usecols=range(2)) 11.头()

/解析器中的usr/local/lib/python3.5/dist-packages/pandas/io/parsers.py(文件路径或缓冲区、sep、分隔符、标题、名称、索引列、usecols、squeeze、prefix、mangle\u dupe\u cols、数据类型、引擎、转换器、true\u值、false\u值、skipinitialspace、skiprows、nrows、na\u值、keep\u默认值、na\u筛选器、冗余、跳过空白行、解析日期、推断日期时间格式、keep\u日期列、日期解析器、dayfirst、迭代器、chunksize、压缩、千、十进制、行终止符、引号、引号、转义符、注释、编码、方言、元组、错误行、警告行、跳脚、跳脚、双引号、delim空格、as-recarray、compact-int、使用无符号、低内存、缓冲行、内存映射、浮点精度) 703跳过空白行=跳过空白行) 704 -->705返回读取(文件路径或缓冲区,kwds) 706 707语法分析器f.名称=名称

/usr/local/lib/python3.5/dist-packages/pandas/io/parsers.py in_read(文件路径或缓冲区,kwds) 449 请尝试: -->451 data=parser.read(nrows) 452最后: 453解析器

/读取中的usr/local/lib/python3.5/dist-packages/pandas/io/parsers.py(self,nrows) 1063 raise VALUERROR('迭代不支持skipfooter') 1064 ->1065 ret=自身引擎读取(nrows) 1066 1067如果self.options.get('as_recarray'):

/读取中的usr/local/lib/python3.5/dist-packages/pandas/io/parsers.py(self,nrows) 1826 def读取(自身,nrows=无): 1827尝试: ->1828数据=自身读取(nrows) 1829除停止迭代外: 1830如果自我第一块:

pandas/_libs/parsers.pyx在pandas中。_libs.parsers.textleader.read()

pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader._read_low_memory()

pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader._read_rows()

pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader。_convert_column_data()

pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader._convert_tokens()

pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader._convert_与_dtype()

pandas/_libs/parsers.pyx在pandas中。_libs.parsers.TextReader._string_convert()

pandas/_libs/parsers.pyx在pandas中。_libs.parsers._string_box_utf8()

UnicodeDecodeError:“utf-8”编解码器无法解码位置3中的字节0xe9:无效的连续字节


我正在用Python 3编写Jupyter笔记本。如何解决此错误?

该文件未进行UTF-8编码。不过,我们可以做出合理的猜测,我们可以请第三方图书馆帮助我们:

In [23]: import urllib, chardet

In [24]: url = 'http://files.grouplens.org/datasets/movielens/ml-100k/u.item'

In [25]: u = chardet.UniversalDetector()

In [26]: u.feed(urllib.request.urlopen(url).read())

In [27]: u.close()
Out[27]: {'confidence': 0.73, 'encoding': 'ISO-8859-1', 'language': ''}

In [28]: movies = pd.read_csv(url, sep='|', names = ['movie_id', 'title'], 
                              usecols = range(2), encoding='iso-8859-1')

In [29]: movies.head()
Out[29]: 
   movie_id              title
0         1   Toy Story (1995)
1         2   GoldenEye (1995)
2         3  Four Rooms (1995)
3         4  Get Shorty (1995)
4         5     Copycat (1995)

将文件更改为UTF-8格式,这将解决问题。若您不知道如何以UTF-8编码格式保存文件,下面的链接将非常有用。
\xe9
是本机windows文本编码的
字符编码,而不是
UTF-8
。使用
movies=pd.read\u csv('http://files.grouplens.org/datasets/movielens/ml-100k/u.item,sep='|',names=['movie_id','title'],usecols=range(2),encoding='cp1250')
可能有效。