忽略回车 returns (u1000D) with read_csv in python pandas

Ignore carriage returns (u1000D) with read_csv in python pandas

我经常收到定期发送的包含 100 多列和数百万行的 csv。这些 csv 文件总是包含特定的一组列,Core_cols = [col_1, col_2, col_3],以及可变数量的其他列,Var_col = [a, b, c, d, e]。核心列始终存在,并且可能有 0-200 个可变列。有时变量列中的其中一列会包含回车return。我知道这可能发生在哪些列中,bad_cols = [a, b, c]

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

我该怎么做:

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

我当前的代码如下所示:

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

我尝试过导入后删除列之类的操作,但此时损坏似乎已经完成。我现在找不到代码,但是在测试一个修复程序时,错误显示类似“数据中的无效字符 u000D”。我无法控制数据源,因此无法对其进行编辑。

Pandas 支持多行 CSV 文件如果文件被正确转义和引用。如果您无法使用 pandas 或 csv 模块在 Python 中读取 CSV 文件,也无法在 MS Excel 中打开它,那么它可能是一个不兼容的“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 文件有数百万行,并且在文件中很晚才发现“坏”行,那么您需要添加一些逻辑来查找“坏”行。