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

如何修复Excel混乱日期?Pandas.to_datetime处理遇阻及跳过方案求助

解决方案

一、精准修正特定错误日期

针对你提到的1414/01/2019和110/05/2019两个错误格式,可以先通过字符串替换或自定义函数修复,再用pandas.to_datetime解析:

方法1:直接替换特定值

先读取数据,对目标列进行精准替换:

import pandas as pd

# 读取数据
test = pd.read_excel('Messy_Dates.xlsx', usecols=[0], header=None, skiprows=[0])
test.columns = ['date']  # 给列命名方便操作

# 替换错误日期
test['date'] = test['date'].replace({
    '1414/01/2019': '14/01/2019',
    '110/05/2019': '11/05/2019'
})

# 解析为日期格式(dayfirst=True适配日/月/年的格式)
test['cleaned_date'] = pd.to_datetime(test['date'], dayfirst=True)

方法2:自定义函数处理通用错误

如果还有类似“日部分多输入数字”的情况,可以写一个函数自动修正:

import pandas as pd

def fix_messy_day(date_str):
    date_str = str(date_str)
    parts = date_str.split('/')
    if len(parts) != 3:
        return date_str  # 格式不对返回原字符串
    
    day, month, year = parts
    # 处理日部分:如果长度超过2,取前两位(确保在1-31的合理范围内)
    if len(day) > 2:
        fixed_day = day[:2]
        if 1 <= int(fixed_day) <= 31:
            return f"{fixed_day}/{month}/{year}"
    return date_str

# 读取数据
test = pd.read_excel('Messy_Dates.xlsx', usecols=[0], header=None, skiprows=[0])
test.columns = ['date']

# 应用修复函数
test['fixed_date'] = test['date'].apply(fix_messy_day)

# 解析为日期
test['cleaned_date'] = pd.to_datetime(test['fixed_date'], dayfirst=True)

二、跳过无法解析的行

如果不想手动修正错误格式,可以利用pandas.to_datetime的errors参数将无法解析的日期转为NaT(无效时间),再删除这些行:

import pandas as pd

test = pd.read_excel('Messy_Dates.xlsx', usecols=[0], header=None, skiprows=[0])
test.columns = ['date']

# 解析日期,无法解析的转为NaT
test['cleaned_date'] = pd.to_datetime(test['date'], dayfirst=True, errors='coerce')

# 删除包含无效日期的行
test_clean = test.dropna(subset=['cleaned_date'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:54:56