我使用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"
一起使用。
这里有什么问题,如何解决它,以便我可以编写和加载具有一致编码的文件?
答案 0 :(得分:2)
您尝试阅读的原始.csv
为encoded
,例如ISO-8859-1
。这就是为什么它是UnicodeDecodeError
- python / pandas使用decode
编解码器尝试utf-8
源代码假设默认情况下源为unicode
。
一旦你指出了非默认的源编码,pandas将使用正确的编解码器将源和解码匹配到内部使用的格式。
请参阅python docs以及更多here。 Also 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'读取数据。