我有一个函数,它接受 df
--> 修改 df
--> 并返回修改后的 df
。
我有一个包含 5 个 dfs
的列表 df
- 我想遍历它们,以便每个都被函数修改,如下所示:
dfs = [df1, df2, df3, df4, df5] # df1 to df5 : valid DataFrames
for df in dfs:
df = function(df)
当我这样做时,列表 dfs
的内容没有改变,我最终得到一个名为 'df' 的新变量,它包含 {{1} 的修改信息}(列表中的最后一个 df5
)。
我做错了什么?有什么办法可以做到这一点吗?
答案 0 :(得分:1)
您将修改后的 df
重新分配给名称 df
,但这不会更改它所代表的列表中的项目。您需要将修改后的 local df
存储回您的列表:
dfs = [df1, df2, df3, df4, df5]
for idx, df in enumerate(dfs):
dfs[idx] = function(df) # immediately store result in list
会解决你的问题。
完整演示:
import pandas as pd
dfs = [pd.DataFrame({"t":[n]}) for n in range(1,6)]
def function(df):
df["t"] = df["t"] * 100
return df
print(*dfs,"", sep= "\n\n")
for idx, df in enumerate(dfs):
dfs[idx] = function(df)
print(*dfs, sep="\n\n")
输出:
t
0 1
t
0 2
t
0 3
t
0 4
t
0 5
t
0 100
t
0 200
t
0 300
t
0 400
t
0 500