UnicodeDecodeError :(' utf-8'编解码器)在读取csv文件时

时间:2015-11-20 05:22:13

标签: python pandas utf-8 python-unicode

我正在尝试的是读取一个csv来创建一个数据帧---在列中进行更改---再次更新/反映更改的值到同一个csv(to_csv) - 再次尝试读取该csv以生成另一个数据帧。 ..我得到一个错误

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 7: invalid continuation byte

我的代码是

 import pandas as pd
 df = pd.read_csv("D:\ss.csv")
 df.columns  #o/p is Index(['CUSTOMER_MAILID', 'False', 'True'], dtype='object')
 df['True'] = df['True'] + 2     #making changes to one column of type float
 df.to_csv("D:\ss.csv")       #updating that .csv    
 df1 = pd.read_csv("D:\ss.csv")   #again trying to read that csv

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 7: invalid continuation byte

因此,请建议我如何避免错误并能够再次将该csv读取到数据帧。

我知道我遗失的地方" encode =某些编解码器类型"或" decode =某种类型"在阅读和写作csv时。

但我不知道究竟应该改变什么。所以需要帮助。

6 个答案:

答案 0 :(得分:38)

已知编码

如果您知道要读取的文件的编码, 你可以用

pd.read_csv('filename.txt', encoding='encoding')

这些是可能的编码: https://docs.python.org/3/library/codecs.html#standard-encodings

未知编码

如果您不知道编码,可以尝试使用chardet,但这不能保证工作。这更像是一种猜测工作。

import chardet
import pandas as pd

with open('filename.csv', 'rb') as f:
    result = chardet.detect(f.read())  # or readline if the file is large


pd.read_csv('filename.csv', encoding=result['encoding'])

答案 1 :(得分:9)

一个简单的解决方案是你可以在像Sublime Text这样的编辑器中打开csv文件并用'utf-8'编码保存它。然后我们可以通过pandas轻松读取文件。

答案 2 :(得分:8)

您第一次读取数据时是否会发生此错误,或者在您将数据写入并再次读回之后的第二次读取时发生错误?我的猜测是,它实际上是在首次读取数据时发生的,因为您的CSV编码不是UTF-8。

尝试在Notepad ++,Excel或LibreOffice中打开该CSV文件。您的数据源中是否包含ç(带cedilla的C)字符?如果是这样,那么你看到的0xE7字节可能是在Latin-1或Windows-1252中编码的ç(在Python中称为“cp1252”)。

查看the documentation的Pandas read_csv()函数,我看到它有一个encoding参数,该参数应该是您希望CSV文件所在的编码名称。所以尝试将encoding="cp1252"添加到read_csv()来电,如下所示:

df = pd.read_csv(r"D:\ss.csv", encoding="cp1252")

请注意,我在文件名前添加了字符r,因此它将被视为“原始字符串”,并且不会特别处理反斜杠。这样,当您将文件名从ss.csv更改为new-ss.csv时,您就不会感到惊讶,其中字符串D:\new-ss.csv将被视为D: ,换行符,ew

无论如何,请在第一次read_csv()来电时尝试使用该编码参数,看看它是否有效。 (这只是一个猜测,因为我不知道您的实际数据。如果数据文件不是私有且不是太大,请尝试发布数据文件,以便我们可以看到它的内容 - 这会让我们做得更好而不仅仅是猜测。)

答案 3 :(得分:4)

是的,你会收到这个错误。我已经解决了这个问题,通过在notepad ++中打开csv文件并通过编码菜单更改编码 - >转换为UTF-8。然后保存文件。然后再次运行python程序。

其他解决方案是在python中使用编解码器模块进行文件的编码解码。我没有用过。

答案 4 :(得分:3)

导入然后检测文件类型的上述方法有效 import chardet

import pandas as pd
import chardet
with open('filename.csv', 'rb') as f:
    result = chardet.detect(f.read())  # or readline if the file is large


pd.read_csv('filename.csv', encoding=result['encoding'])

答案 5 :(得分:2)

我是python的新手。当我手动将excel文件上的扩展名更改为.csv并尝试使用read_csv读取它时,请考虑这个问题。但是,如果我打开excel文件并保存为csv文件,它似乎工作。