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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:41:45