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

使用reduce合并多个pandas DataFrame报错,如何正确修复?

修复reduce合并多个DataFrame时的后缀重复错误

当你用固定的suffixes=('_x', '_y')通过reduce合并多个DataFrame时,合并到第3个及之后的DataFrame会触发列名重复冲突:

  • 第一次合并data1和data2:生成value_x(来自data1)、value_y(来自data2)
  • 第二次合并上述结果和data3:此时right的value列和left中现有列不重名,直接保留为value
  • 第三次合并上述结果和data4:此时left已有value列,会给它加后缀_x,但left中已经存在之前生成的value_x,导致列名重复触发报错

方法一:提前给每个DataFrame的value列加唯一后缀

在创建DataFrame时,直接给每个value列按序号命名,这样合并时不会有同名列,无需指定suffixes:

import pandas as pd
from functools import reduce

data1 = [['A',1], ['B',2], ['C',3]]
data2 = [['A',4], ['B',5], ['C',6]]
data3 = [['A',7], ['B',8], ['C',9]]
data4 = [['A',10], ['B',11], ['C',12]]

dfs = []
# 给每个df的value列加上唯一序号后缀
for idx, data in enumerate([data1, data2, data3, data4], start=1):
    df = pd.DataFrame(data, columns=['name', f'value_{idx}'])
    dfs.append(df)

# 合并时无需指定suffixes
dfm = reduce(lambda left, right: pd.merge(left, right, on=['name'], how='outer'), dfs)
print(dfm)

方法二:用concat替代reduce合并(更简洁)

由于所有DataFrame结构一致,可先将它们按name设为索引后横向拼接,再重命名列:

import pandas as pd

data1 = [['A',1], ['B',2], ['C',3]]
data2 = [['A',4], ['B',5], ['C',6]]
data3 = [['A',7], ['B',8], ['C',9]]
data4 = [['A',10], ['B',11], ['C',12]]

# 生成所有df并设置name为索引
dfs = [pd.DataFrame(data, columns=['name', 'value']).set_index('name') for data in [data1, data2, data3, data4]]
# 横向拼接
df_concat = pd.concat(dfs, axis=1)
# 重命名列
df_concat.columns = [f'value_{i+1}' for i in range(len(dfs))]
# 恢复name为普通列
dfm = df_concat.reset_index()
print(dfm)

内容的提问来源于stack exchange,提问作者lucky1928

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:48:17