我有一个功能:
该函数如下所示:
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 # This works as intended
df = df.rename(columns={"col1":"new_col1"}) # This doesn't work as intended
return list1
当我查看结果时,df 有 col3 但没有 new_col1:
print(func()[0]["df"])
# Output:
Empty DataFrame
Columns: [col1, col2, col3]
Index: []
我不明白为什么会发生这种情况。根据我对范围的理解,新列的创建和重命名要么都应该进入,要么都不进入。为什么一个进入而不是另一个?
为了持久化列名的改变,需要设置
inplace=True
:
df = df.rename(columns={"col1":"new_col1"}, inplace=True)
根据文档默认设置 inplace=False 这里