如何对pandas DataFrame字典用多输出函数通过字典推导生成两个新字典
报错根因
- 第一种写法错误:字典推导生成的是单字典,每个值为
somefunction返回的二元组,直接对字典解包时Python默认迭代字典的键,工作表数量超过2个就会触发解包数量不匹配错误。 - 第二种写法错误:对字典执行
zip(*)操作时,解包的是字典的键而非值,无法得到你需要的df处理结果。
正确实现方案
两种常用实现,都保证每个DataFrame只调用一次somefunction,避免重复计算:
方案1:先收集中间结果,再分别构造字典
最直观易读的写法,适配绝大多数场景:
def somefunction(df): df1 = df.apply(lambda x: x*2) df2 = df.apply(lambda x: x*4) return df1, df2 # 先收集所有(工作表名, 处理后df1, 处理后df2)元组 intermediate = [(key, *somefunction(df)) for key, df in df_dict.items()] # 分别构造两个结果字典 df_dict1 = {key: df1 for key, df1, df2 in intermediate} df_dict2 = {key: df2 for key, df1, df2 in intermediate}
方案2:利用zip推导更简洁的写法
适合偏好短代码的场景,逻辑和方案1完全一致:
keys = df_dict.keys() processed_res = (somefunction(df) for df in df_dict.values()) df_dict1, df_dict2 = [dict(zip(keys, res_group)) for res_group in zip(*processed_res)]
内容的提问来源于stack exchange,提问作者DHJ
相关产品推荐
相关产品推荐

