繁体   English   中英

应用循环后,未更改原始数据帧

[英]No changes to original dataframe after applying loop

我有一个数据框列表,这样

df_lst = [df1, df2]

我还创建了一个函数来删除数据框中带有“ 0”的行:

def dropzeros(df):
    newdf = df[df['x']!=0.0]
    return newdf

我尝试通过循环应用此方法,并在循环中放置了一个赋值变量,但是即使在运行循环后,原始数据帧也保持不变。

for df in df_lst:
    df = dropzeros(df)

我也尝试使用列表理解来解决这个问题

df_lst = [dropzeros(df) for df in df_lst]

我知道该函数有效,因为当我在命令dropzeros(df)之前和之后应用print(len(df))时,len下降了,但是,我可能会知道如何解决这个问题,例如我的原始数据帧运行循环后更改?

这是因为for循环中的变量df没有引用列表中的值。 您将在循环的每个迭代中重新创建变量df

您可以通过enumeratepipe分配功能:

for idx, df in enumerate(df_lst):
    df_lst[idx] = df.pipe(dropzeros)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM