UnicodeDecodeError:使用Anaconda3打开csv文件时'utf-8'

时间:2017-03-15 12:09:52

标签: python csv pandas unicode

我有一些挑战将olympicmedal.csv文件加载到Jupiter笔记本中(使用Anaconda3)。 我不知道是什么问题,因为我能够加载其他csv文件。

尝试将CS​​V文件上传到Jupyter笔记本时出现的错误。

代码:

olym=pd.read_csv('data/olympicmedals.csv')

错误:

UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-12-64f15f4c3016> in <module>()
----> 1 olym=pd.read_csv('data/olympicmedals.csv')

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, escapechar, comment, encoding, dialect, tupleize_cols, error_bad_lines, warn_bad_lines, skipfooter, skip_footer, doublequote, delim_whitespace, as_recarray, compact_ints, use_unsigned, low_memory, buffer_lines, memory_map, float_precision)
    644                     skip_blank_lines=skip_blank_lines)
    645 
--> 646         return _read(filepath_or_buffer, kwds)
    647 
    648     parser_f.__name__ = name

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds)
    399         return parser
    400 
--> 401     data = parser.read()
    402     parser.close()
    403     return data

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in read(self, nrows)
    937                 raise ValueError('skipfooter not supported for iteration')
    938 
--> 939         ret = self._engine.read(nrows)
    940 
    941         if self.options.get('as_recarray'):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in read(self, nrows)
   1506     def read(self, nrows=None):
   1507         try:
-> 1508             data = self._reader.read(nrows)
   1509         except StopIteration:
   1510             if self._first_chunk:

pandas\parser.pyx in pandas.parser.TextReader.read (pandas\parser.c:10415)()

pandas\parser.pyx in pandas.parser.TextReader._read_low_memory (pandas\parser.c:10691)()

pandas\parser.pyx in pandas.parser.TextReader._read_rows (pandas\parser.c:11728)()

pandas\parser.pyx in pandas.parser.TextReader._convert_column_data (pandas\parser.c:13162)()

pandas\parser.pyx in pandas.parser.TextReader._convert_tokens (pandas\parser.c:14116)()

pandas\parser.pyx in pandas.parser.TextReader._convert_with_dtype (pandas\parser.c:16172)()

pandas\parser.pyx in pandas.parser.TextReader._string_convert (pandas\parser.c:16400)()

pandas\parser.pyx in pandas.parser._string_box_utf8 (pandas\parser.c:22072)()

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

2 个答案:

答案 0 :(得分:0)

您正在获得UnicodeError,这意味着Python解释器无法使用它的默认编码转换传递给它的位序列。发生这种情况是因为文件中有一些非ascii字符,无法对其进行编码/解码

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

根据read_csv()文档,您可以指定文件的编码类型。例如:

#1
olym = pd.read_csv('data/olympicmedals.csv', encoding='utf-8')

#2
olym = pd.read_csv('data/olympicmedals.csv', encoding='cp1252')

#3
olym = pd.read_csv('data/olympicmedals.csv', encoding='latin_1')

如果utf-8不起作用,您可以尝试指定其他编码类型。我使用的一些文件使用cp1252编码,但我已经使用了latin_1iso8859

看看Python Standard Encodings

设置正确的编码类型将允许Python Interpreter获取文件中每组位的正确转换。

答案 1 :(得分:0)

您收到的是UnicodeError,这意味着您的文件编码与unicode不同。 Pandas使用utf-8作为默认编码。

如果您想在Python中检测文件的编码,可以尝试以下代码:

from chardet.universaldetector import UniversalDetector
usock = open('data/olympicmedals.csv', 'rb')
detector = UniversalDetector()
for line in usock.readlines():
    detector.feed(line)
    if detector.done: break
detector.close()
usock.close()
print (detector.result)

这也显示了探测器预测文件编码的可信度。

一旦你知道了编码,就可以试试这个:

olym = pd.read_csv('data/olympicmedals.csv', encoding='<encoding-type>')

您可以在Python here中找到标准编码。

在Windows中,如果使用Notepad ++打开文件,则会突出显示这些无效字符(如果文件为utf-8)。它还确定您的文件的编码。