有没有办法在读取 csv 文件后删除它们的行? [复制]

Posted

技术标签:

【中文标题】有没有办法在读取 csv 文件后删除它们的行? [复制]【英文标题】:Is there a way to delete rows of a csv file after reading them? [duplicate] 【发布时间】:2021-11-21 05:13:49 【问题描述】:

我有一个巨大的数据集(大约 30 GB 大小),我需要将 CSV 分解为更小的 CSV 文件。使用skipRows 争论的传统方式似乎需要很多时间。我认为,如果在阅读了最初的rowSize 之后,这个过程可能会快得多;比如 1000,我们从 CSV 文件中删除这些行,因此在每次迭代之后,我们不必跳过这些行,这基本上是每次都读取这些行数。

有什么方法可以实现吗?

【问题讨论】:

您正在寻找术语“块”。此外,您不需要从 csv 文件中删除行,但只需确保您没有读取内存中的整个文件。请参阅:***.com/questions/25962114/… 或 pandas.pydata.org/pandas-docs/stable/reference/api/…(搜索块大小) 您是否考虑过使用为此目的设计的tool? 【参考方案1】:

为了节省内存,最好分块读取大型 CSV 文件,而不是尝试一次加载整个文件。然后,每个块都可以舒适地放入内存中。这是使用read_csv()chunksize 参数完成的。

每个块都作为其自己的数据帧返回,然后可以根据需要将其写入单独的 CSV 文件。例如:

import pandas as pd

with pd.read_csv("large.csv", chunksize=1000) as reader:
    for chunk_number, df_chunk in enumerate(reader, start=1):
        print(chunk_number)
        df_chunk.to_csv(f"large_chunkchunk_number:03.csv", index=False)

这将创建多个名为 large_chunk001.csv 的输出 CSV 文件,依此类推。每个块将包含 1000 行(我建议使用更大的数字)。

这也会自动为每个输出 CSV 文件添加相同的标题。

【讨论】:

以上是关于有没有办法在读取 csv 文件后删除它们的行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何删除错误行错误的行并使用 pandas 或 numpy 读取剩余的 csv 文件?

如何删除错误行错误的行并使用 pandas 或 numpy 读取剩余的 csv 文件?

在Shell脚本中读取CSV文件,直到没有标题的行结束

Impala 外部表读取未压缩文件但具有名称 (*.csv.gz)

在python中读取csv压缩文件

我如何读取大的csv(20G)[重复]