如果某个列包含某个值,如何检查大型csv的每一行并写入该行?

时间:2016-06-21 12:55:40

标签: python pandas

我正在使用一个大型(3.5GB).csv文件,我无法在内存中完全处理并希望:

  • 读入一行数据
  • 检查字段是否等于给定条件
  • 如果为true,则将该行附加到新的.csv文件。如果为false,则跳至下一行
  • 循环直到到达原始文件的结尾

最终结果将是一个单独的.csv,其中包含符合条件的所有行。

3 个答案:

答案 0 :(得分:2)

我会这样做:

chunksize = 10**6 // 2  # you may want to adjust it ... 
for chunk in pd.read_csv(filename, chunksize=chunksize):
    (chunk.query('condition1 & condition2 & ... ')
          .to_csv('output.csv', mode='a', index=False))

诀窍是mode='a'参数,它会指示pandas 添加行而不是覆盖CSV文件......

答案 1 :(得分:1)

尝试以下代码。将适当数量的记录(您的机器允许)设置为块大小。

ButtonPress

答案 2 :(得分:0)

我发现以下内容对我有用。请注意,这也为列表中的每个条件值生成了单独的输出文件。

import csv

# criteria is the column number from the source data to check against the values list
criteria = 4

valueslist= ['criteria1','criteria2','criteria3']

for item in valueslist:

    with open('sourcedata.csv', 'rb') as inf, open(item + '.csv','wb') as outf:
        reader = csv.reader(inf)
        writer = csv.writer(outf)

        # -- Write Headers as first row
        writer.writerow(["column1", "column2", "column3"])
        for row in reader:
            if row[criteria] == item:
                writer.writerow(row)
相关问题