我有一个大的(3.5GB)工作.csv文件,我不能完全在内存中处理和希望:如何检查一个大的csv的每一行,如果某列中包含某个特定的值,则可以写入该行?
- 读取数据的一行
- 检查一个字段等于给定条件
- 如果为true,则将该行附加到新的.csv文件。如果为假,直到达到原始文件的末尾
的最终结果将是包含与条件匹配的所有行单独的.csv跳到下一行
我有一个大的(3.5GB)工作.csv文件,我不能完全在内存中处理和希望:如何检查一个大的csv的每一行,如果某列中包含某个特定的值,则可以写入该行?
的最终结果将是包含与条件匹配的所有行单独的.csv跳到下一行
我发现以下为我工作。请注意,这也为列表中的每个条件值生成了一个单独的输出文件。
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)
请尝试下面的代码。设置合适数量的记录(您的机器允许)为块大小。
chunksize = 10 ** 5
for chunk in pd.read_csv(filename, chunksize=chunksize):
df=df.append (chunk [chunk.field==criterion])
我会做这种方式:
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'
参数,它会指导大熊猫补充,而不是覆盖CSV文件行...
请提供您已经编写的代码,以便我们可以帮助您做到正确。 – TehSphinX
[在Python中读取大文本文件,一行一行地将其加载到内存中](http://stackoverflow.com/questions/6475328/read-large-text-files-in-python-line-by-line-没有加载到内存中) – rsm
欢迎朋友。为了让你的问题对于想要帮助的人能够理解和“有吸引力”,请考虑发布你迄今尝试过的任何代码,你试图分析的* .csv的一些代表行,等等。 。付出一些努力吧.. –