python - Pandas 的 read_csv C 引擎有什么方法可以忽略或替换 Unicode 解析错误吗?

标签 python pandas csv unicode

有关在 Python 中从磁盘读取字符串的大多数问题都涉及编解码器问题。相比之下,我有一个 CSV 文件,里面完全是垃圾数据。创建示例的方法如下:

b = bytearray(b'a,b,c\n1,2,qwe\n10,-20,asdf')
b[10] = 0xff
b[11] = 0xff
with open('foo.csv', 'wb') as fid:
    fid.write(b)

注意第二行第三列有两个字节,0xFF,不代表任何编码,只是少量的垃圾数据。

当我尝试使用 pandas.read_csv 阅读此内容时:

import pandas as pd
df = pd.read_csv('foo.csv') # fails

我自然会得到一个错误:

  File "pandas/_libs/parsers.pyx", line 881, in pandas._libs.parsers.TextReader.read
  ...
  File "pandas/_libs/parsers.pyx", line 1520, in pandas._libs.parsers._string_box_utf8
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

但是,如果我使用 Pandas 的 Python CSV 引擎,我可以成功读取此文件:

df2 = pd.read_csv('foo.csv', engine='python') # success

在这种情况下,无效字符将替换为 Unicode 用于表示“无效字符”的 U+EFBF 字符。

问题:Pandas 的 C CSV 引擎有什么办法可以做与 Python 相同的事情吗?

最佳答案

使用 python 引擎看到的无效字符的替换对应于编码类字节对象时的 errors='replace' 模式。

您可以使用任意单字节编码读取 csv,并使用此错误模式对列进行转码(将转换器传递给 read_csv 或使用 series.str.encode/decode 方法),但它非常麻烦,因为您必须识别一组特定的列。

对于全局效果,由于 read_csv 尚不支持 errors 参数,因此您可以使用 python 内置 预先打开文件open,它确实支持它。

df = pd.read_csv(open('foo.csv', errors='replace'))

关于python - Pandas 的 read_csv C 引擎有什么方法可以忽略或替换 Unicode 解析错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60311784/

相关文章:

python - Keyerror 多索引数据框 pandas

python - Pandas:对列类别中的每一行进行排序/百分位数

python - Pandas csv - 清理错误列中的数据

python - 箱线图 X 值出现多次

MySQL(5.6) "select * into outfile.."没有创建文件

Excel 电力查询 : transform two cells into two duplicate rows

python - 为什么这个 numba 代码比 numpy 代码慢 6 倍?

python - Python 有流式正则表达式模块吗?

python - 复制 Python 子进程的终端输出

python - 如何让 pygtk 条目只接受 float ?