【问题标题】:Ignore carriage returns (u1000D) with read_csv in python pandas在 python pandas 中使用 read_csv 忽略回车符(u1000D)
【发布时间】:2021-10-03 15:30:13
【问题描述】:

我会定期收到一个包含 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”。我不控制数据的来源,因此无法对其进行编辑。

【问题讨论】:

  • pandas 可以正常读取默认正确引用 (") 的多行 CSV 文件;例如 df = pd.read_csv('test.csv')。CSV 文件是否在 Excel 中正确打开?
  • 这些行无法在 excel 中正确打开
  • 这是格式正确的多行 CSV:play,text\n Hamlet,"There are more things in Heaven and Earth, Horatio,\n than are dreamt of in your philosophy."
  • 尝试分块读取文件? pd.read_csv(filename, chunksize=chunksize)
  • 看起来您需要先对数据进行一些数据清理,然后才能将其作为 CSV 数据进行操作。尝试在 test.csv 文件中捕获 4 行 CSV 数据并尝试在 Excel 中打开它。反复试验 - 进行更改,直到它在 Excel 中正确加载,然后看到它在 Pandas 中打开相同的文件。接下来,以编程方式对原始未更改数据的文本行进行这些更改,并尝试在 Pandas 中打开。

标签: python pandas csv python-unicode


【解决方案1】:

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 文件有数百万行,并且在文件中很晚才发现“坏”行,那么您需要添加一些逻辑来查找“坏”行。

【讨论】:

    猜你喜欢
    • 2022-01-07
    • 2021-08-22
    • 2020-12-30
    • 1970-01-01
    • 2021-08-06
    • 2013-07-26
    • 1970-01-01
    • 2012-03-15
    • 2015-09-20
    相关资源
    最近更新 更多