You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:05:25