如何在pandas中筛选不符合%d/%m/%Y日期格式的对应数据行
实现方法
你可以用pandas.to_datetime()的格式校验能力实现筛选,具体代码如下:
import pandas as pd # 按指定格式尝试转换Date列,转换失败的值会被置为NaT(时间类型的空值) # 如果你的Date列已经是datetime类型,需要先转成字符串再处理:df['Date'].astype(str) converted_date = pd.to_datetime(df['Date'], format='%d/%m/%Y', errors='coerce') # 筛选不符合格式的行:转换结果为NaT的记录 filter_invalid_date = df[converted_date.isna()]
参数说明
format='%d/%m/%Y':指定严格匹配日/月/年的格式,不会自动适配其他日期格式errors='coerce':所有不符合格式、无法正常转换的值都会被统一设置为NaT
可选调整规则
如果要区分「日期为空」和「日期格式错误」两种情况,可以调整筛选条件排除空值:
filter_invalid_date = df[converted_date.isna() & df['Date'].notna()]
如果要把这个校验和你之前的筛选规则合并,一次性找出所有不符合要求的行,可以按如下写法合并条件:
all_invalid = df[ # 原有规则1:Currency为空 (df['Currency'].isnull()) | # 原有规则2:日期晚于2021-06-16且Subtype为空 ((df["Date"] > '2021-06-16' ) & (df['Subtype'].isnull())) | # 新增规则:日期格式不符合要求 (pd.to_datetime(df['Date'], format='%d/%m/%Y', errors='coerce').isna()) ]
内容的提问来源于stack exchange,提问作者Fred
相关产品推荐
相关产品推荐

