含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
相关产品推荐
相关产品推荐

