You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:遍历DataFrame列表并更新DataFrame的有效方法

问题解决:遍历DataFrame列表保留指定列

你的问题出在循环中的变量赋值不会修改原DataFrame对象:当你在for df in [df1, df2, df3]里执行df = df.filter(regex='FLAG')时,df只是原DataFrame的临时引用,赋值后它指向了新生成的过滤后DataFrame,原df1/df2/df3并没有被修改。

下面是两种可行的解决方法:

方法一:列表推导式批量生成处理后的DataFrame

直接用列表推导式生成过滤后的DataFrame列表,再重新赋值给原变量:

import pandas as pd

df1 = pd.DataFrame(columns=['FREQUNECY_ID', 'START_DATE', 'END_DATE', 'FLAG_ACTIVE', 'FLAG_CURRENT'])
df2 = pd.DataFrame(columns=['PRODUCT_ID', 'PURCHASE_DATE', 'FLAG_ACTIVE', 'FLAG_CURRENT'])
df3 = pd.DataFrame(columns=['FREQUNECY_ID', 'START_DATE', 'END_DATE', 'FLAG_ACTIVE', 'FLAG_CURRENT'])

# 批量过滤并重新赋值
df1, df2, df3 = [df.filter(regex='FLAG') for df in [df1, df2, df3]]

print(df3.columns)
# 输出: Index(['FLAG_ACTIVE', 'FLAG_CURRENT'], dtype='object')

方法二:通过索引遍历修改列表元素

先把DataFrame存入列表,通过索引修改列表内的元素,再按需重新赋值给原变量:

import pandas as pd

df1 = pd.DataFrame(columns=['FREQUNECY_ID', 'START_DATE', 'END_DATE', 'FLAG_ACTIVE', 'FLAG_CURRENT'])
df2 = pd.DataFrame(columns=['PRODUCT_ID', 'PURCHASE_DATE', 'FLAG_ACTIVE', 'FLAG_CURRENT'])
df3 = pd.DataFrame(columns=['FREQUNECY_ID', 'START_DATE', 'END_DATE', 'FLAG_ACTIVE', 'FLAG_CURRENT'])

dfs = [df1, df2, df3]
# 按索引遍历,直接替换列表中的元素
for i in range(len(dfs)):
    dfs[i] = dfs[i].filter(regex='FLAG')

# 若需要保留原变量名,重新赋值
df1, df2, df3 = dfs

print(df3.columns)

另外,你注释里的列表推导式写法有误,正确写法是:

col_lst = [col for col in df.columns if 'FLAG' in col]
df = df[col_lst]

这个逻辑和filter(regex='FLAG')效果一致,可按需选择。

内容的提问来源于stack exchange,提问作者rams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:10:50