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

如何解决Pandas中用日期差值填充DataFrame NaN的类型错误?

Pandas日期差计算与NaN填充问题解决

问题场景

我的DataFrame包含Date_created和Date_closed两列,Date_closed为NaN代表案件未结。想要新增Days_to_close列存储日期差:已结案件用Date_closed - Date_created,未结案件用今日日期 - Date_created。

最初执行代码:

DF['Days_to_close']=DF['Date_Closed']-DF['Date_Created']

已结案件能算出结果,但未结案件因Date_closed为NaN导致Days_to_close也是NaN。

尝试填充时用了以下代码:

today = datetime.date.today()
DF['Days_to_close'].fillna(today- DF['Date_Created'])

报错:unsupported operand type(s) for -: 'DatetimeArray' and 'datetime.date'

又尝试创建今日日期的DataFrame:

today = datetime.date.today()
todaydf = pd.Dataframe({today})

报错:cannot subtract DatetimeArray from ndarray


解决方法

核心问题是日期类型不匹配:Pandas的DatetimeArray是矢量化的日期类型,不能直接和Python原生datetime.date运算,得统一用Pandas的Timestamp类型。

不需要循环遍历,用Pandas矢量化操作即可高效解决,步骤如下:

  • 确保日期列是datetime类型(如果还不是,先转换):
DF['Date_Created'] = pd.to_datetime(DF['Date_Created'])
DF['Date_Closed'] = pd.to_datetime(DF['Date_Closed'])
  • 计算初始的Days_to_close:
DF['Days_to_close'] = DF['Date_Closed'] - DF['Date_Created']
  • 用Pandas的pd.Timestamp.today()获取今日时间(Timestamp类型),计算未结案件的天数差并填充NaN:
# 获取今日Timestamp,去掉时分秒只保留日期部分
today = pd.Timestamp.today().normalize()
# 填充NaN:对未结案件,用今日日期减去创建日期
DF['Days_to_close'] = DF['Days_to_close'].fillna(today - DF['Date_Created'])

补充说明

  • normalize()方法可以把Timestamp的时分秒部分置为00:00:00,确保计算的是完整天数差
  • Pandas矢量化操作比循环遍历效率高得多,尤其是处理大数据量时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:31:05