读取包含pandas数据帧的csv文件时出现编码错误

时间:2016-05-11 03:24:12

标签: python csv pandas encoding

我使用df.to_csv()将数据帧转换为csv文件。在python 3下,pandas doc表示它默认为utf-8编码。

但是当我在同一个文件上运行pd.read_csv()时,我收到错误:

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

pd.read_csv()encoding="ISO-8859-1"一起使用。

这里有什么问题,如何解决它,以便我可以编写和加载具有一致编码的文件?

3 个答案:

答案 0 :(得分:2)

您尝试阅读的原始.csvencoded,例如ISO-8859-1。这就是为什么它是UnicodeDecodeError - python / pandas使用decode编解码器尝试utf-8源代码假设默认情况下源为unicode

一旦你指出了非默认的源编码,pandas将使用正确的编解码器将源和解码匹配到内部使用的格式。

请参阅python docs以及更多hereAlso very good.

答案 1 :(得分:0)

以下是未明确使用encoding参数与pandas.to_csv时使用某些未知(?)编码的pandas的具体示例。

0x92是'(看起来像撇号)

import pandas
ERRORFILE = r'written_without_encoding_parameter.csv'
NO_ERRORFILE = r'written_WITH_encoding_parameter.csv'

df_dummy = pandas.DataFrame([u"Yo what's up", u"I like your sister’s friend"])

df_dummy.to_csv(ERRORFILE)
df_dummy.to_csv(NO_ERRORFILE, encoding="utf-8")

df_no_error_with_latin = pandas.read_csv(ERRORFILE, encoding="Latin-1")
df_no_error = pandas.read_csv(NO_ERRORFILE)
df_error = pandas.read_csv(ERRORFILE)
>>> UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 18: invalid start byte

所以看起来你必须明确地将encoding="utf-8"to_csv一起使用,即使pandas docs说它默认使用它。或者将encoding="Latin-1"read_csv一起使用。

更令人沮丧的是......

df_error_even_with_utf8 = pandas.read_csv(ERRORFILE, encoding="utf-8")
>>> UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 18: invalid start byte

我使用的是Windows 7,Python 3.5,pandas 0.19.2。

答案 2 :(得分:0)

请尝试使用 encoding ='unicode_escape'读取数据。