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

如何在Python Pandas中替换DataFrame中的无效日期值为当日日期

嘿,这个场景我经常遇到,给你一套简单高效的解决方案,分分钟搞定无效日期的检测和替换:

具体实现步骤

1. 导入依赖并准备示例数据

首先我们先导入需要的库,同时创建你提供的示例DataFrame:

import pandas as pd
from datetime import date

# 创建你给出的示例DataFrame
data = {'Date': ['12/12/2018', '12/11/2018', '#REF', '12/1/205', '12/1/205', 'N/A', 'Unknown', '6/12/2018', '6/3/2018']}
df = pd.DataFrame(data)

2. 检测无效日期并替换为当日日期

这里的核心技巧是利用pd.to_datetime的errors='coerce'参数——它会把所有无法解析为有效日期的内容(不管是#REF、N/A这类标识,还是格式错误的12/1/205)统一转换成NaT(Pandas里的"非时间"值),之后我们就可以用fillna把这些NaT替换成当日日期:

# 获取当日日期,转换成Pandas兼容的datetime类型
today = pd.Timestamp(date.today())

# 将Date列转为datetime格式,无效值强制转为NaT
# 注意dayfirst参数:如果你的日期是日/月/年就设为True,这里是月/日/年所以设为False
df['Date'] = pd.to_datetime(df['Date'], errors='coerce', dayfirst=False)

# 把所有NaT替换成当日日期
df['Date'] = df['Date'].fillna(today)

3. 可选:先查看哪些是无效日期

如果你想先确认原始数据里的无效日期行,可以先跑这段代码:

# 筛选出原始数据中无法解析为日期的行
invalid_rows = df[pd.to_datetime(df['Date'], errors='coerce').isna()]
print("原始数据中的无效日期行:")
print(invalid_rows)

关键点说明

  • errors='coerce'是处理这类问题的关键,它帮我们把各种奇奇怪怪的无效值统一成NaT,不用逐个判断字符串。
  • 一定要根据你的实际日期格式调整dayfirst参数,否则可能会出现日期解析错误(比如把12/1/2018当成日/月/年的话就会解析成2018年1月12日)。
  • 用pd.Timestamp(date.today())是为了让当日日期和DataFrame中的datetime类型保持一致,避免类型不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:01:58