【发布时间】:2015-08-18 14:36:52
【问题描述】:
我有一堆大的(约 400 万个值)csv 文件,我需要获取每一列并创建一个文件,以一种可以由不同程序解释的方式组织值。列的长度完全不同(200 万到 1000 个值之间),每个 csv 可能有 4 到 100 列。
我可以将整个内容加载到 pandas.DataFrame 中,然后遍历该系列,但这很慢:
import pandas as pd
import re
import os
for f in os.listdir(folder):
gc = pd.read_csv('{}/{}'.format(folder, f))
strain = f[:-7] # files have regular name structure, this just gets the name
with open('{}.txt'.format(strain), 'w+') as out_handle:
for column in gc:
series = gc[column]
for i in range(len(series))[::10]:
pos = i + 1
gc_cont = s[i]
if pd.isnull(gc_cont):
continue
out_handle.write('{} {}'.format(pos, gc_cont)
# I'm writing other info, but it's not important here
也许用一百万 + NaN 值填充较小的列并将整个内容加载到内存中会产生很大的性能成本?无论如何,我认为逐列阅读会更有效率,但我找不到这样做的方法。
Pandas 可以做到chunk size (docs),但这是对行进行分块。如果我逐行写入,我要么必须一次打开 4-100 个文件,要么多次遍历原始文件以写入每个单独的列。这些方法中的任何一种是否合适,或者我缺少什么?
【问题讨论】:
标签: python csv pandas dataframe