pandas使用to_timedelta转换datetime列触发TypeError问题排查
报错根因定位
直接触发报错的错误操作
代码中df_static['time_delta'] = pd.to_timedelta(df_static['Time'])的逻辑完全不符合pandas类型转换规则:
pd.to_timedelta()的设计用途,是将纯数值、符合时间间隔格式的字符串转换为timedelta(时间差)类型- 你传入函数的
Time列已经通过pd.to_datetime()转换为datetime64[ns](绝对时间戳)类型,pandas不支持将绝对时间戳直接强制转换为相对时间差类型,因此抛出TypeError: dtype datetime64[ns] cannot be converted to timedelta64[ns]的报错。
附带的变量引用错误
你前面定义的DataFrame对象名为df,但后续赋值操作时直接调用了从未定义的df_static对象,二者没有关联,前面针对df['Time']做的类型转换完全不会作用到df_static上,属于变量名引用失误。
参考操作的逻辑误区
你参考的向量化添加timedelta列的方案,核心逻辑并不是“把datetime列强制转类型为timedelta”,而是通过两个时间值做向量化差值运算,自动生成timedelta类型的列,完全不需要对datetime列直接套用类型转换函数。
合法的可运行示例参考:
# 计算每行时间与表内最早时间的差值,直接生成timedelta类型列 df['time_delta'] = df['Time'] - df['Time'].min()
上述操作为纯向量化实现,无循环开销,生成的time_delta列会自动识别为timedelta64[ns]类型。
内容的提问来源于stack exchange,提问作者AHalperin
相关产品推荐
相关产品推荐

