在 for 循环中创建数据框

时间:2021-06-18 09:57:08

标签: python pandas

我有一个函数,它接受 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)。

我做错了什么?有什么办法可以做到这一点吗?

1 个答案:

答案 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