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

如何使用Python Pandas验证DataFrame中的日期格式正确性?

处理DataFrame中的无效日期问题

嘿,我来帮你搞定DataFrame里那些格式不对或者逻辑上无效的日期!比如你提到的13/13/2020(月份和日期都超出范围)、13/10/2011(月份13无效)这类数据,用pandas就能轻松识别和处理,下面是具体步骤:

1. 标记无效日期(转为NaT)

首先用pd.to_datetime配合errors='coerce',把不符合mm/dd/yyyy格式或者逻辑无效的日期转成NaT(Not a Time),这样能快速定位问题数据:

import pandas as pd

# 示例DataFrame,模拟你的数据
df = pd.DataFrame({'date': ['12/31/2020', '13/13/2020', '13/10/2011', '02/29/2021', '03/15/2022']})

# 按指定格式转换,无效日期转为NaT
df['validated_date'] = pd.to_datetime(df['date'], format='%m/%d/%Y', errors='coerce')

这里format='%m/%d/%Y'明确了预期的日期格式,errors='coerce'会把所有不符合规则的(比如月份>12、日期>当月最大天数、非闰年的2月29号)都转成NaT,方便后续处理。

2. 查看无效日期行

如果你想确认哪些是无效日期,可以筛选出validated_date为NaT的行:

# 提取所有无效日期的记录
invalid_rows = df[df['validated_date'].isna()]
print("无效日期记录:")
print(invalid_rows)

运行后就能看到所有有问题的日期条目,方便你核对原始数据。

3. 处理无效日期

根据你的需求,有几种常见的处理方式:

方式一:删除无效日期行

如果这些无效数据没用,可以直接删除:

# 删除包含无效日期的行
clean_df = df.dropna(subset=['validated_date'])

方式二:手动修正错误日期

如果是输入错误(比如月份和日期写反了),可以针对性修正后重新验证:

# 假设'13/10/2011'是把日和月写反了,修正为'10/13/2011'
df.loc[df['date'] == '13/10/2011', 'date'] = '10/13/2011'

# 重新验证日期
df['validated_date'] = pd.to_datetime(df['date'], format='%m/%d/%Y', errors='coerce')

方式三:标记有效性(不转换)

如果你只想标记哪些日期有效,不想转成NaT,可以自定义验证函数:

from datetime import datetime

def check_valid_date(date_str, date_format='%m/%d/%Y'):
    try:
        # 尝试按指定格式解析日期
        datetime.strptime(date_str, date_format)
        return True
    except ValueError:
        # 解析失败说明日期无效
        return False

# 添加一列标记日期是否有效
df['is_valid_date'] = df['date'].apply(check_valid_date)

这样is_valid_date列会显示True(有效)或False(无效),方便后续分析。

注意事项

如果你的数据里混了多种日期格式(比如有的是dd/mm/yyyy,有的是mm/dd/yyyy),不建议省略format参数让pandas自动推断,因为容易出现歧义(比如01/02/2020可能被解析成1月2号或2月1号)。最好先统一格式再处理。

内容的提问来源于stack exchange,提问作者SSax P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:27:50