我有一个数据框列表,使得
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
。
您可以通过 enumerate
进行分配和 pipe
你的功能:
for idx, df in enumerate(df_lst):
df_lst[idx] = df.pipe(dropzeros)
关于python - 应用循环后原始数据帧没有变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53708927/