我在 csv 原始数据文件中遇到了 EM Dash 的问题,导致 Pandas 无法读取 CSV。
我运行了下面的一些变体
datalocation = filepath
df = pd.read_csv(datalocation)
收到错误:'UnicodeDecodeError:'ascii'编解码器无法解码位置 4 中的字节 0xef:序号不在范围 (128) 中'
其他变化包括
df = pd.read_csv(datalocation, encoding='utf-8')
df = pd.read_csv(datalocation, encoding='utf-16')
收到错误:'UnicodeDecodeError:'utf8'编解码器无法解码位置 0 中的字节 0xff:起始字节无效'
df = pd.read_csv(datalocation, na_values=['—'])
收到错误:“行包含 NULL 字节”
如果成功,数据框应类似于下面的示例表。
+---------+------+----------+--------+
| Country | Date | Delivery | Region |
+---------+------+----------+--------+
| a | — | 10 | foo |
| b | — | 30 | — |
| c | 2 | —50 | foo— |
| — | — | 20 | —bar |
| a | — | 40 | bar— |
| — | — | —6— | bar |
| b | — | 90— | foo |
| c | — | 70 | bar |
| a | — | 80 | foo |
| c | — | 100 | foo— |
+---------+------+----------+--------+
花时间研究 SO 上的资源后,我了解到它与 Unicode/UTF-8/ASCII 之间的一些冲突有关。
有没有办法在运行“pd.read_csv”之前删除所有 EM Dash?请记住,我不知道 csv 原始文件中所有 EM Dash 的精确单元格。
最佳答案
终于弄清楚了如何通过在读取数据集之前将数据集预处理到新文件中来做到这一点!希望与也遇到此问题的任何人分享该方法。
import os, re
import pandas as pd
EMDASH = '—'
with open('scrubbed_file','wt') as outfile:
with open('original_file_location','rt') as infile:
for line in infile:
outfile.write(re.sub(EMDASH,'-',line))
df = pd.read_csv('scrubbed_file', engine='python',
encoding='utf_16_le',
names=['Country', 'Date', 'Delivery', 'Region'],
delimiter='\t',
quotechar='"',
skiprows=2, skip_footer=2, thousands = ',')
希望这可以帮助任何在数据框中遇到问题的字符的人。
关于python - CSV 中的 EM Dash 导致 Pandas 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31685295/