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

Pandas循环处理DataFrame列表时过滤操作不生效的问题咨询

Pandas循环处理DataFrame列表时过滤操作不生效的问题咨询

各位好,我平时处理多个需要做相似修改的DataFrame时,都会用for循环来快速搞定,避免重复写一堆相同的代码。我也明白,循环里对df做的修改有时候只是作用在副本上,所以像dropna这种方法我会用inplace=True参数来解决这个问题,但碰到过滤行这种操作时,就没这么方便的参数可用了。

我现在要过滤掉to Converted列日期早于now的行,单独在循环外做这个过滤是能正常生效的,所以不是数据类型不对或者没有符合条件的数据的问题。下面是我试的几种代码写法,想请教下大家:到底是我哪里理解错了,还是这里有什么特定的限制?如果是后者,各位有经验的大佬都是怎么处理这种场景的呢?

原始代码

now = pd.to_datetime(date.today(), format='%Y%m%d')

for df in df_list:
    df.dropna(how='all', axis=1, inplace=True)
    df['Valid From Converted'] = pd.to_datetime(df['Valid From'], format='%Y%m%d')
    df['to Converted'] = pd.to_datetime(df['to'], format='%Y%m%d')
    df = df[df['to Converted'] >= now]

用enumerate的写法

now = pd.to_datetime(date.today(), format='%Y%m%d')

for i, df in enumerate(df_list):
    df.dropna(how='all', axis=1, inplace=True)
    df['Valid From Converted'] = pd.to_datetime(df['Valid From'], format='%Y%m%d')
    df['to Converted'] = pd.to_datetime(df['to'], format='%Y%m%d')
    df = df[df['to Converted'] >= now]
    df_list[i] = df

用range遍历索引的写法

for i in range(len(df_list)):
    df_list[i].dropna(how='all', axis=1, inplace=True)
    df_list[i]['Valid From Converted'] = pd.to_datetime(df_list[i]['Valid From'], format='%Y%m%d')
    df_list[i]['to Converted'] = pd.to_datetime(df_list[i]['to'], format='%Y%m%d')
    df_list[i] = df_list[i][df_list[i]['to Converted'] >= now]

备注:内容来源于stack exchange,提问作者kawuel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:19:37