如何对字典中存储的多份DataFrame子集批量应用函数?
问题解答
嘿,别担心重复提问的事儿,咱们直接来解决你的问题~
首先明确说:直接执行result = fun_c(dfs)是不正确的。原因很简单:你的fun_c是预定义的处理单个DataFrame的辅助函数,但你传给它的dfs是一个存储了多个DataFrame的字典,函数没办法直接识别并处理字典里的每个子DataFrame。
下面是几种常见场景的正确做法,你可以根据自己的需求选择:
1. 把每个子DataFrame的处理结果存入新字典
如果你想保留原字典的键值对应关系,把每个子DF的处理结果也存在字典里,可以用循环或者字典推导式:
循环写法(更直观)
results = {} for key, sub_df in dfs.items(): # 对每个子DataFrame应用fun_c,结果存入新字典 results[key] = fun_c(sub_df)
字典推导式(更简洁)
results = {key: fun_c(sub_df) for key, sub_df in dfs.items()}
2. 合并所有处理后的结果为一个大DataFrame
如果你的目标是把所有子DF处理完后合并成一个完整的DataFrame,可以先收集所有处理后的子DF,再用pd.concat合并:
import pandas as pd # 先处理每个子DF,收集到列表中 processed_sub_dfs = [fun_c(sub_df) for sub_df in dfs.values()] # 合并成大DF,ignore_index=True重置索引 final_result = pd.concat(processed_sub_dfs, ignore_index=True)
3. 逐个处理子DataFrame(无需保存所有结果)
如果只是需要对每个子DF执行fun_c(比如处理后直接写入文件、输出结果),直接循环处理即可:
for sub_df in dfs.values(): # 对每个子DF执行fun_c fun_c(sub_df) # 这里可以追加其他操作,比如写入文件: # sub_df_processed = fun_c(sub_df) # sub_df_processed.to_csv(f"processed_{key}.csv")
额外补充:如果你的fun_c本身被设计成可以接收字典作为输入(比如内部会遍历字典处理每个DF),那直接传dfs是没问题的,但从常规的“预定义辅助函数”的定位来看,这种情况比较少见,所以还是建议按上面的方式逐个处理字典里的子DataFrame。
内容的提问来源于stack exchange,提问作者john_mon
相关产品推荐
相关产品推荐

