UnicodedeCoderror:(utf-8)读取csv fi时出错

2024-06-08 23:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试的是读取csv以生成数据帧---在列中进行更改---再次将更改的值更新/反映为相同的csv(以生成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到一个数据帧。

我知道在读和写csv的时候,我遗漏了“encode=some codec type”或“decode=some type”。

但我不知道该怎么改,所以需要帮助。


Tags: csvto数据truedfreadtype错误
3条回答

一个简单的解决方案是,您可以像Sublime Text一样在编辑器中打开csv文件,并用“utf-8”编码保存它。然后我们可以很容易地通过熊猫读取文件。

已知编码

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

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'])

这个错误是在第一次读取数据时发生的,还是在第二次读取数据时发生的?我的猜测是它实际上发生在数据的第一次读取上,因为CSV的编码不是UTF-8。

尝试在记事本++、Excel或LibreOffice中打开CSV文件。您的数据源中是否有ç(C with cedilla)字符?如果是这样,那么您看到的0xE7字节可能是用拉丁语-1或Windows-1252(在Python中称为“cp1252”)编码的ç。

查看Pandas read_csv()函数的the documentation,我看到它有一个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()调用中尝试该编码参数,看看它是否有效。(这只是猜测,因为我不知道你的实际数据。如果数据文件不是私有的,也不是太大,那么试着发布数据文件,这样我们就可以看到它的内容——这比猜测要好得多。)

相关问题 更多 >