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

Python函数中DataFrame添加列生效但重命名列失效的原因

为什么Pandas添加列生效但重命名不生效?

问题出在Pandas方法的操作方式差异以及Python变量引用的逻辑上:

  1. 添加列是原地修改
    df["col3"] = np.nan 属于直接对原DataFrame对象进行的原地修改操作——你通过df = dict1["df"]拿到了原DataFrame的引用,修改这个引用指向的对象时,字典里存储的原DataFrame也会跟着变化,所以外部能看到新增的col3。

  2. rename默认返回新对象
    df.rename(columns={"col1":"new_col1"}) 默认不会修改原DataFrame,而是创建并返回一个全新的DataFrame对象。你把这个新对象赋值给了局部变量df,但字典里的dict1["df"]仍然指向原来的那个未被重命名的DataFrame,所以外部看不到重命名的效果。

两种解决方法

方法1:使用inplace=True让rename原地修改

修改重命名代码,让操作直接作用于原对象:

import pandas as pd
import numpy as np

def func():
    list1= [
             {"item":1, "df":pd.DataFrame(columns=["col1","col2"])},
             {"item":2, "df":pd.DataFrame(columns=["col1","col2"])}
           ]
    for dict1 in list1:
        df = dict1["df"]
        df["col3"] = np.nan
        df.rename(columns={"col1":"new_col1"}, inplace=True)  # 添加inplace=True
    
    return list1

方法2:将新对象重新赋值回字典

把rename返回的新DataFrame替换字典里原来的引用:

import pandas as pd
import numpy as np

def func():
    list1= [
             {"item":1, "df":pd.DataFrame(columns=["col1","col2"])},
             {"item":2, "df":pd.DataFrame(columns=["col1","col2"])}
           ]
    for dict1 in list1:
        df = dict1["df"]
        df["col3"] = np.nan
        df = df.rename(columns={"col1":"new_col1"})
        dict1["df"] = df  # 将新对象赋值回字典
    
    return list1

验证结果

修改后调用函数,输出会变为:

print(func()[0]["df"])
# 输出:
Empty DataFrame
Columns: [new_col1, col2, col3]
Index: []

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:47:28