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

含NaN的Timestamp列计算天数差报错TypeError的解决方法

问题原因

你遇到的错误是因为col2的类型为float64(初始值是[np.nan]),而col1是datetime64[ns]类型,不同类型的数组相减会触发TypeError。另外,pandas中时间类型的缺失值需要用NaT(Not a Time),而非普通的np.nan。

解决方法

先把col2转换为datetime类型,让np.nan自动转为NaT,再执行相减操作即可——此时包含NaT的位置计算结果会自动返回NaN,完全符合你的需求。

修改后的代码:

import numpy as np
import pandas as pd

d1 = {'col1':  pd.Timestamp(2017, 1, 1, 12), 'col2' : [np.nan]}
x = pd.DataFrame(d1)

# 将col2转为datetime类型,np.nan会自动转为NaT
x['col2'] = pd.to_datetime(x['col2'])
# 计算天数差,自动处理NaT为NaN
x['col3'] = (x['col2'] - x['col1']).dt.days.astype('Int64')

print(x)
补充说明
  • 用pd.to_datetime转换后,col2的类型变为datetime64[ns],和col1类型一致,相减会得到Timedelta类型的结果。
  • 最后转类型时用Int64(大写I)而非int64,因为int64无法存储NaN,Int64是pandas的可空整数类型,能兼容NaN值。如果不需要整数类型,也可以去掉.astype('Int64'),结果会是float类型的天数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:55:31