pandas DatetimeIndex下浮点数列除以日期间隔报错如何处理
报错原因
- 你调用
df.index.to_pydatetime()得到的是numpy数组,datetime(2021,10,21)与该数组做减法得到的是timedelta64类型的numpy数组,numpy原生数组没有days属性,只有pandas的TimedeltaIndex或Timedelta类型对象才支持直接取days属性。 - 额外注意你的代码里列名也存在不匹配问题:示例数据中浮点列名为
Floatcol1,但你代码里写的是floatnumbers,也会触发列不存在的报错。
解决方法
方法1(推荐):直接用Pandas原生日期索引运算,不用转python datetime
你的索引本身就是DatetimeIndex类型,直接和pandas时间戳做减法得到TimedeltaIndex,可以直接取days属性:
import pandas as pd # 列名替换为你实际的列名即可 df['calc'] = df['Floatcol1'] / (pd.Timestamp('2021-10-21') - df.index).days
方法2:如果必须用标准库datetime对象,把差值转成pandas Series后取天数值
import datetime # 先计算差值数组 delta_arr = datetime.datetime(2021,10,21) - df.index.to_pydatetime() # 转成Series后用dt.days取天数值,指定索引对齐原数据避免错位 df['calc'] = df['Floatcol1'] / pd.Series(delta_arr, index=df.index).dt.days
注意事项
- 如果索引中存在晚于
2021-10-21的日期,计算得到的days为负数,可根据业务需求自行做边界过滤 - 原列中的
nan值计算后会自动保留,不需要额外处理
内容的提问来源于stack exchange,提问作者asimo
相关产品推荐
相关产品推荐

