首页 > 解决方案 > 从 timedelta64 转换为 float 时得到 NaN

问题描述

所以我有一个看起来像这样的数据框: 在此处输入图像描述

我使用以下代码计算了持续时间:

df['dropoff_time'] = pd.to_datetime(df['tpep_dropoff_datetime'])
df['pickup_time'] = pd.to_datetime(df['tpep_pickup_datetime'])
df['duration'] = df['dropoff_time'] - df['pickup_time']

我正在尝试使用以下代码将出租车的持续时间从 timedelta64 转换为浮动:

df['duration'] = df[:5]['duration'] / np.timedelta64(1, 's')

但是,似乎我第二次运行上面的代码将 timedelta64 转换为 float,我不断收到此消息: 在此处输入图像描述

下图显示了每列的数据类型:

在此处输入图像描述

所以我得到了我想要的持续时间列的浮点类型,但是,其中一些正在返回一个 NaN 值,如图所示,我真的不明白我为什么会得到这个以及如何解决这个问题。 ..有人可以帮忙吗?

标签: pythonpandasdataframe

解决方案


问题是你只过滤了前 5 个值[:5],所以它只减去了 3 个值,pandasNaN为所有其他行添加了 s:

df['duration'] = df[:5]['duration'] / np.timedelta64(1, 's')
                 ^^^^^^^        
                  here

所以解决方案是删除[:5]

df['duration'] = (df['dropoff_time'] - df['pickup_time'])/ pd.Timedelta("1s")

或者:

df['duration'] = (df['dropoff_time'] - df['pickup_time']).td.total_seconds()

推荐阅读