Python 读取包含数据帧的csv文件时发生编码错误

Python 读取包含数据帧的csv文件时发生编码错误,python,csv,pandas,encoding,Python,Csv,Pandas,Encoding,我使用df.to_csv()将数据帧转换为csv文件。在Python3下,声明默认为utf-8编码 但是,当我在同一个文件上运行pd.read\u csv()时,会出现以下错误: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xae in position 8: invalid start byte 但是使用pd.read_csv()和encoding=“ISO-8859-1”是有效的 这里的问题是什么?我如何解决它,以便以一致的编码

我使用
df.to_csv()
将数据帧转换为csv文件。在Python3下,声明默认为utf-8编码

但是,当我在同一个文件上运行
pd.read\u csv()
时,会出现以下错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xae in position 8: invalid start byte
但是使用
pd.read_csv()
encoding=“ISO-8859-1”
是有效的


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

您试图读取的原始
.csv
编码的
,例如
ISO-8859-1
。这就是为什么它是一个
UnicodeDecodeError
-python/pandas正在尝试使用
utf-8
编解码器
对源代码进行解码,假设默认源代码是
unicode

指示非默认源编码后,pandas将使用适当的编解码器匹配源并解码为内部使用的格式


请参阅python和更多内容

这里有一个具体的例子,说明熊猫在未明确使用
编码
参数和
pandas.to_csv
时使用了一些未知(?)编码

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

导入熊猫
ERRORFILE=r'writed\u而不使用\u编码\u参数.csv'
NO_ERRORFILE=r'writed_WITH_encoding_parameter.csv'
df_dummy=pandas.DataFrame([u“你好”,u“我喜欢你姐姐的朋友”])
df_dummy.to_csv(错误文件)
df_dummy.to_csv(无错误文件,编码=“utf-8”)
df_no_error_,拉丁语=pandas.read_csv(ERRORFILE,encoding=“拉丁语-1”)
df_no_error=pandas.read_csv(no_error文件)
df_error=pandas.read_csv(ERRORFILE)
>>>UnicodeDecodeError:“utf-8”编解码器无法解码位置18中的字节0x92:无效的开始字节
因此,看起来您必须将
encoding=“utf-8”
一起显式地使用到_csv
,即使熊猫文档说它在默认情况下使用此选项。或者将
encoding=“Latin-1”
read\u csv
一起使用

更令人沮丧的是。。。


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

请尝试使用编码class='unicode_escape'读取数据。您能给出一个重现此问题的数据帧示例吗?@Tadhgmandon Jensen无法,但是,我始终遇到使用来自同一来源的其他数据集创建的数据帧的问题。我没有尝试使用
ISO-8859-1
进行读取,因为在
utf-8
中读取原始文件时没有遇到错误。这是否意味着即使我能够加载原始文件并将其写入磁盘,也可能发生错误?您是对的,这就是它应该如何工作的。如果您的文件是
utf8
编码的,就像python 3默认的那样,那么您应该能够毫无问题地读入它。这通常在使用另一个应用程序(如excel)打开时中断。。需要足够详细的文件和流程信息才能重现错误,抱歉,到目前为止,我们只能解释错误消息。将参数
encoding='utf-8'
添加到
df.to_csv()
解决了问题。同样的问题,将excel df转换为csv。后来尝试读取csv,发现“utf-8”错误-起始字节无效。使用pd.read_csv()和encoding=“ISO-8859-1”可以工作,但不确定原因。也许这是Python 3.6中的一个bug?
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