在Python pandas中使用read_csv忽略回车符(u1000D)

问题描述 投票:0回答:1

我定期收到包含 100 多列和数百万行的 csv。这些 csv 文件始终包含某些列集

Core_cols = [col_1, col_2, col_3]
,以及数量可变的其他列
Var_col = [a, b, c, d, e]
。核心列始终存在,并且可能有 0-200 个可变列。有时,变量列中的一列将包含回车符。我知道这可能发生在哪些列,
bad_cols = [a, b, c]

当使用 pd.read_csv 导入 csv 时,这些回车符会导致结果数据框中的行损坏。如果没有这些列,我无法重新制作 csv。

我该怎么办:

  1. 忽略这些列和其中包含的回车符?或
  2. 将 csv 中的回车符替换为空格?

我当前的代码看起来像这样:

df = pd.read_csv(data.csv, dtype=str)

我已经尝试过诸如在导入后删除列之类的操作,但此时损坏似乎已经造成了。我现在找不到代码,但是在测试修复时,错误显示类似“数据中的无效字符

u000D
”之类的内容。我不控制数据源,因此无法对其进行编辑。

python pandas csv python-unicode
1个回答
-1
投票

Pandas 支持多行 CSV 文件如果文件被正确转义和引用。如果您无法使用 pandas 或 csv 模块在 Python 中读取 CSV 文件,也无法在 MS Excel 中打开它,那么它可能是不兼容的“CSV”文件。

需要隔离导致问题的行,然后使用其中一些行和一些正常行创建一个小型示例 CSV 文件,以找出适用于好行和坏行的解决方案。

建议手动编辑 CSV 文件示例并使其正常工作,以便可以使用 Excel 打开。然后重新创建步骤,在 Python 中以编程方式对其进行规范化以处理大文件。

使用此代码创建示例 CSV 文件,将前约 100 行复制到新文件中。

with open('bigfile.csv', "r") as csvin, open('test.csv', "w") as csvout:
    line = csvin.readline()
    count = 0
    while line and count < 100:
        csvout.write(line)
        count += 1
        line = csvin.readline()

现在您有一个可以使用的小测试文件。如果原始 CSV 文件有数百万行,并且稍后在文件中发现“坏”行,那么您需要添加一些逻辑来查找“坏”行。例如,如果“ " 出现在“A”列的值中。

© www.soinside.com 2019 - 2024. All rights reserved.