多DataFrame合并指定各数据框后缀报错,求代码修复方案
解决多DataFrame合并时后缀参数的ValueError问题
错误原因解析
你遇到的ValueError: too many values to unpack (expected 2),本质是对pd.merge的suffixes参数理解有误:这个参数只能接受长度为2的元组,它的作用是给当前正在合并的两个DataFrame的重复列名分别加后缀。而你传入了4个元素的元组,merge函数试图把它拆成两个值,自然就报错了。
正确解决方案:预先给每个DataFrame添加后缀
既然要给N个DataFrame分别指定专属后缀,最靠谱的方式是先给每个DataFrame的列名手动加上对应后缀,再执行合并操作。这样既避免了merge参数的限制,也让逻辑更清晰。
修改后的代码如下:
import pandas as pd from functools import reduce def agg_df(dfList, suffix_list): # 先给每个DataFrame的列添加对应后缀 renamed_dfs = [] for df, suffix in zip(dfList, suffix_list): # 重命名所有列(索引保持不变) renamed_df = df.add_suffix(suffix) renamed_dfs.append(renamed_df) # 合并所有重命名后的DataFrame temp = reduce(lambda left, right: pd.merge(left, right, left_index=True, right_index=True, how='outer'), renamed_dfs) return temp # 调用示例 df = agg_df([df_cool, df_light, df_sp, df_hvac], ('_chiller', '_light', '_sp', '_hvac'))
代码说明
df.add_suffix(suffix):Pandas内置方法,给DataFrame的所有列名末尾添加指定后缀,索引不受影响,完美适配你的按索引合并需求。- 遍历过程中把每个DataFrame重命名后存入列表,再用
reduce执行两两合并——此时所有列名已经是唯一的,不需要再指定suffixes参数。
这样修改后,就能实现你想要的给每个原始DataFrame的列指定专属后缀的效果,同时避免了原代码的错误。
内容的提问来源于stack exchange,提问作者Katsuya Obara
相关产品推荐
相关产品推荐

