我有一个大的表格数据,需要按组合并和拆分。简单的方法是使用pandas,但唯一的问题是内存。
我有这段代码来合并数据框:
import pandas as pd;
from functools import reduce;
large_df = pd.read_table('large_file.csv', sep=',')
这,基本上将整个数据加载到内存中
# Then I could group the pandas dataframe by some column value (say "block" )
df_by_block = large_df.groupby("block")
# and then write the data by blocks as
for block_id, block_val in df_by_block:
pd.Dataframe.to_csv(df_by_block, "df_" + str(block_id), sep="\t", index=False)
上面代码的唯一问题是内存分配,这会冻结我的桌面。我尝试将此代码转移到dask
,但dask
没有完整的groupby
实施。
注意:我本来可以对文件进行排序,然后逐行读取数据并拆分为"块"价值变化。但是,唯一的问题是" large_df.txt"通过合并多个数据帧在上游管道中创建。
有什么建议吗?
谢谢,
更新: 我尝试了以下方法,但它看起来似乎仍然很重要:
# find unique values in the column of interest (which is to be "grouped by")
large_df_contig = large_df['contig']
contig_list = list(large_df_contig.unique().compute())
# groupby the dataframe
large_df_grouped = large_df.set_index('contig')
# now, split dataframes
for items in contig_list:
my_df = large_df_grouped.loc[items].compute().reset_index()
pd.DataFrame.to_csv(my_df, 'dask_output/my_df_' + str(items), sep='\t', index=False)
一切都很好,但代码
my_df = large_df_grouped.loc[items].compute().reset_index()
好像又把一切都拉进了记忆中。
任何改进此代码的方法??