Python中如何对DataFrame列表迭代调用自定义合并函数解决大表合并内存不足问题
Pandas大表分片关联实现方案
首先先修正你当前代码的两个隐含问题:
- 你通过
list(bigdata1.groupby("GROUP"))得到的split_data列表中,每个元素是**(分组名, 分组对应DataFrame)**的二元组,不是直接的DataFrame对象,调用关联函数时需要取出元组的第二个元素使用 - 你定义的关联函数缺少
return语句,执行后不会返回关联后的结果,需要先调整函数定义
修正后的关联函数如下:
def joining_function(df): return pd.merge(df, bigdata2, on = 'PERSON_ID', how = 'left')
方案1:用列表存储所有关联结果,按索引调取
你可以直接通过列表推导式批量执行关联,结果会按照分片的顺序存储在列表中:
joined_result_list = [joining_function(df_part) for (group_name, df_part) in split_data]
调取方式:取第N个分片的关联结果,直接用索引即可,比如取第1个分片结果写joined_result_list[0],取第10个写joined_result_list[9](Python索引从0开始计数)。
方案2:用字典存储所有关联结果,按分组名调取
如果需要根据分组名快速查找对应的关联结果,可以用字典存储,分组名作为键,关联后的DataFrame作为值:
joined_result_dict = {group_name: joining_function(df_part) for (group_name, df_part) in split_data}
调取方式:比如要调取GROUP值为"GROUP_123"的关联结果,直接写joined_result_dict["GROUP_123"]即可。
如果后续需要把所有分片的关联结果合并为一个完整的DataFrame,执行以下代码即可:
full_merged_df = pd.concat(joined_result_list, ignore_index=True)
内容的提问来源于stack exchange,提问作者Dr Wampa
相关产品推荐
相关产品推荐

