在特定行上,pandas的read_csv函数无法成功读取,返回UnicodeDecodeError错误:'utf-8'编解码器。
在特定行上,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导入成功。)
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的问题。