Pandas按日期筛选DataFrame并追加至另一DataFrame的问题
问题解决:筛选并追加DataFrame中晚于指定日期的数据
你的核心问题是日期类型处理混乱:一边用字符串存储日期,一边用datetime类型做比较,而且解析df2日期时没指定格式规则,导致日期解析错误,最终筛选逻辑失效。
问题拆解
maxdate是字符串格式("11/09/2022"),但后续和pd.to_datetime(df2['DATE'])的datetime对象比较,类型不匹配会触发隐性转换,逻辑完全错误。- 解析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
相关产品推荐
相关产品推荐

