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

计算DataFrame日期列与指定日期差值时返回NaN的问题求助

问题原因排查与解决方法

核心原因

  1. 日期格式字符串错误:pd.to_datetime中使用的%m-%d-%YYYY是无效格式,正确的4位年份占位符是%Y,错误格式会导致所有日期解析失败,生成NaT(Not a Time)值,后续计算差值自然返回NaN。
  2. 冗余的类型转换:pd.to_datetime已经返回Timestamp类型对象,df['date'].agg(pd.Timestamp)这一步完全多余,不会改变数据类型,反而可能掩盖解析失败的问题。
  3. today类型不明确:如果today不是pandas.Timestamp或datetime.datetime类型,会导致日期减法运算失败,返回NaN。

解决步骤

  1. 修正日期格式字符串:将format='%m-%d-%YYYY'改为format='%m-%d-%Y'。
  2. 移除冗余转换代码:删除df['date']=df['date'].agg(pd.Timestamp)这一行。
  3. 确保today为合法日期类型:显式定义today为pandas.Timestamp对象,比如today = pd.Timestamp.today()。
  4. 处理解析失败的行(可选):如果原始日期列存在不符合格式的数据,可通过df['date'].isna()筛选并处理这些行,避免后续运算受影响。

修正后的代码示例

import pandas as pd

# 假设df已定义
today = pd.Timestamp.today()
df['date'] = pd.to_datetime(df['date'], format='%m-%d-%Y', errors='coerce')
# 检查是否有解析失败的行(可选)
print("解析失败的行数:", df['date'].isna().sum())
# 计算日期差值,跳过NaT值
df['Days'] = df['date'].apply(lambda x: (today - x).days if pd.notna(x) else pd.NA)
print(df['Days'])

验证要点

  • 运行df['date'].head()查看是否生成了有效的Timestamp对象,而非NaT。
  • 若仍有NaN,检查原始date列的字符串是否完全符合mm-dd-yyyy格式(比如是否有多余空格、错误分隔符)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:15:16