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

时间:2018-12-10 15:38:31

标签: python python-3.x pandas loops dataframe

我有一个数据帧列表,例如

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]

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

1 个答案:

答案 0 :(得分:0)

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

您可以通过enumeratepipe分配您的功能:

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