在特定行上,pandas的read_csv函数无法成功读取,返回UnicodeDecodeError错误:'utf-8'编解码器。

5 浏览
0 Comments

在特定行上,pandas的read_csv函数无法成功读取,返回UnicodeDecodeError错误:'utf-8'编解码器。

使用Pandas的read_csv()在某些特定行上返回UnicodeDecodeError错误。

如果我使用nrows=n1,它可以正常工作,没有任何错误。但是当我使用nrows=n2(n2>n1)时,它却返回了UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 12: invalid start byte错误。

在之前它可以正常工作,但在某一点上它一直返回错误。

有时候当我重新启动电脑时它又可以正常工作,但只有第一次调用时有效。

尝试了使用encoding选项和error_bad_lines=False的read_csv方法,但仍然无效。

这真的让我发疯。有什么想法吗?

如果这与系统问题有关,至少我想知道如何获取出错行的行号。

(我使用encoding选项将表从MATLAB导出,指定为etf-8编码(也尝试了我的系统默认编码CP949)。从SAS导入成功。)

0
0 Comments

pandas的read_csv函数在特定行上失败,返回UnicodeDecodeError: 'utf-8' codec的问题,出现的原因是文件中包含无法使用默认的utf-8编码解码的字符。解决方法是使用合适的编码方式来读取文件。

在使用pandas的read_csv函数时,可以传入多个参数,其中之一是encoding参数,用于指定字符的编码方式。如果想要了解更多关于编码的知识,可以参考这个链接。由于编码方式有很多种,并且无法访问原始问题中的数据,我们可以查看这个页面,其中列出了Python标准的编码方式。

假设文件名为data.csv,我们可以使用如下代码来读取文件:

import pandas as pd
pd.read_csv('data.csv', encoding='iso-8859-1')  # iso-8859-1是用于西欧的编码方式

需要注意的是,编码方式的列表非常庞大,建议根据具体情况进行调整。

从pandas版本1.3.0开始,添加了encoding_errors参数(参考这个PR)。该参数影响如何处理编码错误。可以在这里找到可能的值列表。

如果想要替换编码错误的字符,可以使用上述提到的编码方式,并使用以下代码:

import pandas as pd
pd.read_csv('data.csv', encoding='iso-8859-1', encoding_errors='replace') 

通过以上方法,我们可以解决pandas的read_csv函数在特定行上失败,返回UnicodeDecodeError: 'utf-8' codec的问题。

0