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

如何对多个pandas DataFrame按相同日期范围进行批量过滤?

问题原因
  • 循环中的df是临时变量,仅指向列表中的DataFrame对象,直接对df重新赋值只会改变临时变量的指向,不会修改原列表中的元素,也不会修改你预先定义的df1、df2变量。
  • 你现有代码仅生成了布尔类型的过滤掩码,没有用掩码对DataFrame做索引,更没有保存过滤后的新DataFrame对象。
  • 你提到的其他格式调整操作可以生效,是因为这类操作属于对DataFrame对象本身的修改(inplace操作),会直接作用到原对象上;而过滤会生成全新的DataFrame对象,必须替换原有引用才能生效。
解决方案

首先建议先将Date列转为datetime类型,避免字符串日期比较的潜在异常,再通过索引遍历列表,将过滤后的新DataFrame赋值回列表对应位置即可:

import pandas as pd

# 初始化DataFrame
d1 = {'Date': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05'],
   'A': [1, 2, 3, 4, 5],
   'B': [6, 7, 8, 9, 10]
 }
df1 = pd.DataFrame(data=d1)

d2 = {'Date': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05'],
       'C': [11, 12, 13, 14, 15],
       'D': [16, 17, 18, 19, 20]
     }
df2 = pd.DataFrame(data=d2)

df_list = [df1, df2]
start_date = '2021-01-01'
end_date = '2021-01-05'

# 批量过滤
for idx in range(len(df_list)):
    # 转日期列
    df_list[idx]['Date'] = pd.to_datetime(df_list[idx]['Date'])
    # 生成过滤掩码
    filter_mask = (df_list[idx]['Date'] > start_date) & (df_list[idx]['Date'] < end_date)
    # 过滤后赋值回列表
    df_list[idx] = df_list[idx][filter_mask]
    # 其他格式调整操作可在此处直接操作df_list[idx]

# 取出过滤后的结果
filtered_df1, filtered_df2 = df_list
输出示例

运行上述代码后filtered_df1的输出如下:

Date  A  B
1 2021-01-02  2  7
2 2021-01-03  3  8
3 2021-01-04  4  9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:39:03