全为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ó
相关产品推荐
相关产品推荐

