我有一个大文件。它有40,955,924条线,大于13GB。我需要能够基于单个字段将该文件分成多个单独的文件,如果我使用的是pd.DataFrame
,我会使用以下代码:
for k, v in df.groupby(['id']):
v.to_csv(k, sep='\t', header=True, index=False)
但是,我得到了错误KeyError: 'Column not found: 0'
,在Iterate over GroupBy object in dask上有一个针对此特定错误的解决方案,但这需要使用熊猫来存储数据帧的副本,而我不能这样做。在拆分此文件方面的任何帮助将不胜感激。
答案 0 :(得分:1)
您要为此使用apply()
:
def do_to_csv(df):
df.to_csv(df.name, sep='\t', header=True, index=False)
return df
df.groupby(['id']).apply(do_to_csv, meta=df._meta).size.compute()
注意
-组密钥存储在数据帧name
中
-我们返回数据框并提供meta
;这并不是必须的,但是您将需要在 something 上进行计算,并且很容易知道确切的含义是什么。
-最终输出将是写入的行数。