如何用Pandas对比列内日期并标记不一致的日期?
解决Pandas DataFrame中日期不一致的标记问题
嘿,我来帮你搞定这个日期过滤的问题!你的CSV里日期格式太杂了,得先把它们统一转换成标准的日期类型,才能轻松揪出和其他日期不一致的条目。下面是具体的解决步骤:
步骤1:导入库并读取数据
首先咱们用Pandas把CSV文件读进来:
import pandas as pd # 读取你的测试CSV文件 df = pd.read_csv('test.csv')
步骤2:统一解析日期列
你的日期有3种不同格式:April7 2018、7April2018、07-04-2018。Pandas的pd.to_datetime可以自动识别大部分常见格式,不过咱们也可以手动指定格式来确保解析准确:
# 定义所有可能的日期格式,覆盖你CSV里的情况 date_formats = ['%B%d %Y', '%d%B%Y', '%d-%m-%Y'] # 自定义解析函数,尝试每种格式直到匹配成功 def parse_custom_date(date_str): for fmt in date_formats: try: return pd.to_datetime(date_str, format=fmt) except ValueError: continue # 如果所有格式都匹配失败,返回Not a Time(缺失值标记) return pd.NaT # 生成解析后的标准日期列 df['Parsed_Date'] = df['Date'].apply(parse_custom_date)
这里的格式说明:
%B:完整月份名称(比如April)%d:两位日期(自动兼容一位数,比如7会被识别为07)%Y:四位年份
如果你不想手动写格式,直接用pd.to_datetime(df['Date'], errors='coerce')也能自动解析你这些日期,效果差不多。
步骤3:标记不一致的日期
接下来咱们找到出现次数最多的日期(也就是大多数人都用的日期),然后标记出和它不一样的条目:
# 找到最常见的日期(取第一个众数) most_common_date = df['Parsed_Date'].mode()[0] # 添加一列标记是否为不一致的日期 df['Is_Invalid_Date'] = df['Parsed_Date'] != most_common_date
查看结果
现在你可以筛选出所有日期不一致的行:
# 输出所有标记为不一致的记录 print(df[df['Is_Invalid_Date']])
注意事项
- 关于
07-04-2018的解析:如果这个日期实际是7月4日(而不是4月7日),你需要把格式改成%m-%d-%Y,避免Pandas误判。这时候可以调整解析函数里的格式列表,把%m-%d-%Y放进去。 - 如果有解析失败的日期(返回
pd.NaT),这些也会被标记为不一致,因为NaT不等于任何有效日期,你可以根据需求修改逻辑(比如单独标记解析失败的条目)。
内容的提问来源于stack exchange,提问作者Kronos
相关产品推荐
相关产品推荐

