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

Pandas按日期筛选DataFrame并追加至另一DataFrame的问题

问题解决:筛选并追加DataFrame中晚于指定日期的数据

你的核心问题是日期类型处理混乱:一边用字符串存储日期,一边用datetime类型做比较,而且解析df2日期时没指定格式规则,导致日期解析错误,最终筛选逻辑失效。

问题拆解

  1. maxdate是字符串格式("11/09/2022"),但后续和pd.to_datetime(df2['DATE'])的datetime对象比较,类型不匹配会触发隐性转换,逻辑完全错误。
  2. 解析df2的DATE列时没加dayfirst=True,pandas默认按mm/dd/yy解析,比如"23/08/22"会被错误识别为2023年8月22日,直接打乱筛选逻辑。

修正后的代码

# 1. 先把df1的DATE列转为datetime类型,确保dd/mm/yyyy格式解析正确
df1['DATE'] = pd.to_datetime(df1['DATE'], dayfirst=True)
# 获取df1的最新日期(datetime对象,不是字符串)
max_date = df1['DATE'].max()

# 2. 处理df2的DATE列:指定dayfirst=True解析dd/mm/yy格式,同时过滤无效值
df2['DATE'] = pd.to_datetime(df2['DATE'], dayfirst=True, errors='coerce')
# 去掉日期解析失败的行(比如df2中X/Y/Z为"-"的无效行)
df2_clean = df2.dropna(subset=['DATE'])

# 3. 基于datetime类型做筛选,得到需要追加的数据
df3 = df2_clean[df2_clean['DATE'] > max_date]

# 4. 追加到df1
df1 = pd.concat([df1, df3], ignore_index=True)

关键细节说明

  • 永远用datetime类型处理日期:避免字符串比较的格式歧义,所有日期相关操作(取最大、筛选、排序)都基于datetime类型执行。
  • errors='coerce':把无法解析的日期转为NaT,后续dropna可以过滤掉类似df2中29/08/22这种空值行。
  • 两位年份解析:pandas默认把22解析为2022,符合你的数据场景,无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:20:22