Pandas将timedelta64转换为float时出现NaN值的问题求解
问题原因
- 出现大量NaN的核心原因:你转换时使用了
df[:5]['duration']仅提取前5行数据参与计算,将计算结果赋值给全表duration列时,前5行以外的所有行都会被自动填充为NaN。 - 第二次运行报错的核心原因:第一次执行转换代码后,
duration列已经从timedelta64类型变为float类型,float类型无法和timedelta64类型直接做除法运算,因此触发类型错误。
解决方法
如果你需要将全表的行程时长统一转换为秒级浮点数值,可以直接使用pandas自带的dt.total_seconds()方法完成转换,不需要额外引入numpy做运算,操作代码如下:
# 先重新计算timedelta类型的时长,覆盖之前错误生成的float类型值 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'] # 直接转换为秒级浮点值 df['duration'] = df['duration'].dt.total_seconds()
如果需要用numpy方式实现,去掉行切片即可:
df['duration'] = df['duration'] / np.timedelta64(1, 's')
内容的提问来源于stack exchange,提问作者DJ-coding
相关产品推荐
相关产品推荐

