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

全为pd.NaT的DataFrame列被识别为datetime类型,无法转换为timedelta类型的问题求助

全为pd.NaT的DataFrame列被识别为datetime类型,无法转换为timedelta类型的问题求助

最近用pandas处理数据时碰到了一个奇怪的问题,想跟大家请教下:

我有一个DataFrame,里面有一列min_latency,用来记录预测器达到的最低延迟。如果预测器运行失败,这个字段就没有有效值,会被设为pd.NaT。

但我发现一个问题:当我通过字典创建DataFrame,并且**所有行的min_latency值都是pd.NaT**的时候,这一列的数据类型会被识别为datetime64[ns],而且我没办法直接把它转换成timedelta类型,会报错。

具体代码和报错情况如下:

import pandas as pd
df = pd.DataFrame([{'id': i, 'min_latency': pd.NaT} for i in range(10)])
print(df['min_latency'].dtype) # 输出结果:datetime64[ns]
df['min_latency'].astype('timedelta64[ns]') # 触发报错:TypeError: Cannot cast DatetimeArray to dtype timedelta64[ns]

有意思的是,如果这一列里哪怕存在一个有效的timedelta值,这个问题就不会出现,此时列的数据类型会自动被识别为timedelta64[ns]:

import pandas as pd
import datetime as dt
df = pd.DataFrame([{'id': i, 'min_latency': pd.NaT} for i in range(10)] + [{'id': -1, 'min_latency': dt.timedelta(seconds=3)}])
print(df['min_latency'].dtype) # 输出结果:timedelta64[ns]

有没有大佬知道这是为什么,以及该怎么解决全为NaT时无法转成timedelta的问题呀?

备注:内容来源于stack exchange,提问作者David Davó

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:25:29