python - 应用循环后原始数据帧没有变化

标签 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]

我知道该函数可以工作,因为当我在命令 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/

相关文章:

python - 带有地理编码的 Twitter 搜索 api 几乎不会返回任何匹配项

python - 在一行中输入 2 个用逗号分隔的变量

python - 两个非连续项目的组合

python - 如何比较元组列表?

python - 在 getattr() 函数上调用方法

python - exe 文件无法正常工作(没有任何反应)

python - 如何基于两列堆叠数据框

python - 在 Raspberry Pi 中使用 SSH 获取输入?

python - 如何通过任意长度的两列列表对 pandas 数据框进行子集化

python - 如何使用 pandas 制作自定义混淆矩阵