如何筛选DataFrame中含非日期格式或空白值的行?
筛选含无效日期/空白值行的最优方法
核心思路
利用 pandas 的pd.to_datetime函数,将目标日期列尝试转换为日期格式——非日期格式、空白值会被强制转为NaT(Not a Time),之后筛选出**至少有一个日期列是NaT**的行即可。
完整实现代码
import pandas as pd # 构造原始DataFrame data = { 'Person Type': ['Employee', 'Employee', 'Employee', 'employee', 'Employee', 'Employee'], 'Hire Date': ['2010-12-01', '2011-03-13', '', '?', '2012-12-19', '2013-02-07'], 'Original Hire Date': ['2010-12-01', 'xxx', '2012-01-02', '2', '2012-12-19', '2013-02-07'] } df = pd.DataFrame(data) # 定义需要检查的日期列 date_columns = ['Hire Date', 'Original Hire Date'] # 生成筛选掩码:每行只要有一个日期列无法转为有效日期,就标记为True invalid_mask = df[date_columns].apply(pd.to_datetime, errors='coerce').isna().any(axis=1) # 筛选出目标行 invalid_rows = df[invalid_mask] print(invalid_rows)
方法优势
- 兼容性强:无需手动编写正则匹配各种日期格式,
pd.to_datetime能自动识别绝大多数标准日期/时间格式,同时自动处理空白值。 - 效率高:基于 pandas 向量化操作,处理大数据集时比循环判断快得多。
- 代码简洁:逻辑清晰,一行掩码即可完成筛选条件的构建,易读易维护。
内容的提问来源于stack exchange,提问作者Paulo Cortez
相关产品推荐
相关产品推荐

