python - 从 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 值,如图所示,我真的不明白我为什么会得到这个以及如何解决这个问题。 ..有人可以帮忙吗?
解决方案
问题是你只过滤了前 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()
推荐阅读
- java - 如何在 Hadoop 中对自定义可写类型进行排序
- ubuntu - 无法在 VPN 后面 ping 本地 Ubuntu 服务器,但本地 SSH 工作正常?
- javascript - ValidationProvider 不显示字典的错误消息 - VeeValidate with VueJS
- php - HTML表格可以通过表单传递并通过post获取值吗?
- c++ - 只使用一个指针来初始化数组中的元素?
- swift - Xcode:停止编译代码行/函数
- r - 查找第二大列名
- .htaccess - 使用 htacess 重写作为 CNAME 的 URL
- python - 模型的 Keras 输出张量必须是 Keras `Layer` 的输出(因此保存过去的层元数据)
- javascript - javascript 键盘事件代码“浏览器搜索”