【问题标题】:No changes to original dataframe after applying loop应用循环后原始数据帧没有变化
【发布时间】:2019-05-11 13:05:36
【问题描述】:

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

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 有所下降,但是,我可以知道如何解决这个问题,这样运行循环后我的原始数据框被更改了吗?

【问题讨论】:

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


    【解决方案1】:

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

    您可以通过enumeratepipe 分配您的函数:

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

    【讨论】:

      猜你喜欢
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      相关资源
      最近更新 更多