将大型数据帧(pandas)拆分为块(但在分组后)

时间:2018-05-07 02:58:39

标签: python pandas dataframe split dask

我有一个大的表格数据,需要按组合并和拆分。简单的方法是使用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() 好像又把一切都拉进了记忆中。

任何改进此代码的方法??

0 个答案:

没有答案