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

循环合并Pandas DataFrame无法更新原变量?求正确实现方式

问题分析与解决方法

问题原因

你遇到的问题本质是Python的对象引用机制导致的:

  • 一开始dataframes = [a, b, c, d]是把a、b等变量指向的DataFrame对象的引用存入了列表。
  • pd.merge()会返回一个全新的DataFrame对象,你循环里把dataframes[index]替换成了这个新对象,但原来的a变量依然指向最初的旧DataFrame,所以调用a.columns看不到合并后的新列。
  • 而直接执行a = pd.merge(...)是让a变量直接指向了新生成的合并对象,所以能生效。

解决办法

方法1:用字典映射变量名,循环后重新赋值给原变量

这种方式更清晰,适合需要保留原变量名的场景:

# 先把原变量和对应名称存入字典
df_dict = {'a': a, 'b': b, 'c': c, 'd': d}

# 循环合并并更新字典里的对象
for name in df_dict:
    df_dict[name] = pd.merge(df_dict[name], additionalInformation, how="left", left_on="cat", right_on="cat")

# 把合并后的对象重新赋值给原变量
a, b, c, d = df_dict['a'], df_dict['b'], df_dict['c'], df_dict['d']

方法2:循环更新列表后,重新给原变量赋值

如果坚持用列表,循环完成后把列表里的新对象重新分配给原变量即可:

dataframes = [a, b, c, d]

for i in range(len(dataframes)):
    dataframes[i] = pd.merge(dataframes[i], additionalInformation, how="left", left_on="cat", right_on="cat")

# 将列表中更新后的新对象重新赋值给原变量
a, b, c, d = dataframes

补充说明

两种方法的核心都是:让原变量a、b等最终指向pd.merge()生成的新DataFrame对象,而不是停留在最初的旧对象上。

内容的提问来源于stack exchange,提问作者four-eyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:31:13