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

如何将字典中各DataFrame指定列追加到另一字典对应DataFrame?

问题原因

原代码存在4个核心错误,直接触发KeyError: 'a'以及后续潜在报错:

  • 初始output是空字典,第一次循环时直接访问不存在的output['a']、output['b']键,是触发当前KeyError的直接原因
  • concat是pandas的顶层函数,不是DataFrame对象的实例方法,不能通过df.concat()的形式调用
  • 列名引用错误:src[i][a]、src[i][b]中的a/b没有加引号,会被识别为未定义的变量而非列名字符串
  • 逻辑错误:output字典的键只有'a'和'b',不存在和src键对应的整数i键,访问output[i]本身也是非法操作
修正方案

推荐先收集所有同名列再一次性拼接,避免循环中反复修改DataFrame,执行效率更高:

import pandas as pd

# 原示例src字典构造
src = {}
for i in range(1,4):
    src[i] = pd.DataFrame({'a':[i, 2*i, 3*i], 'b':[10*i, 20*i, 30*i], 'c':[100*i, 200*i, 300*i]})

# 修正后的output构造逻辑
output = {}
# 遍历需要提取的列名
for col in ['a', 'b']:
    # 收集所有src中对应列,按列方向拼接
    output[col] = pd.concat([df[col] for df in src.values()], axis=1)
运行效果

执行后output字典内容如下:

  • output['a']:
a  a  a
0  1  2  3
1  2  4  6
2  3  6  9
  • output['b']:
b   b   b
0  10  20  30
1  20  40  60
2  30  60  90

如果需要区分每列的来源,可以在拼接时重命名列,将列名和src的键值绑定:

output = {}
for col in ['a', 'b']:
    col_list = []
    for k, df in src.items():
        tmp_col = df[col].rename(f"{col}_{k}")
        col_list.append(tmp_col)
    output[col] = pd.concat(col_list, axis=1)

此时output['a']的列名会变为a_1/a_2/a_3,可以直观识别数据来自哪个源DataFrame。

内容的提问来源于stack exchange,提问作者David H. J.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 19:03:32