首页 > 解决方案 > 在 for 循环中创建数据框

问题描述

我有一个函数接受df--> 修改df--> 并返回修改后的df.

我有一个dfs包含 5的列表df-我想遍历它们,以便每个都由函数修改,如下所示:

dfs = [df1, df2, df3, df4, df5]  # df1 to df5 : valid DataFrames

for df in dfs:
    df = function(df)

当我这样做时,列表的内容dfs没有改变,我只是得到一个名为“df”的新变量,其中包含(列表中的最后一个)的修改信息。df5df

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

标签: pythonpandas

解决方案


您将修改df后的名称分配回名称df,但这不会更改它所代表的列表中的项目。您需要将修改后的本地 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

推荐阅读