DataFrame索引日期差计算报错:'int' object is not subscriptable 求解法
问题:计算DataFrame索引天数差时报错
以下是复现代码及错误信息:
type(data1.index) # pandas.core.indexes.base.Index data1.index = pd.to_datetime(data1.index) type(data1.index) # pandas.core.indexes.datetimes.DatetimeIndex d1 = data1.index[-1] d1 # Timestamp('2022-11-02 00:00:00') d3 = data1.index[1] d3 # Timestamp('2021-10-03 00:00:00') (d1-d3).days[0] # --------------------------------------------------------------------------- # TypeError Traceback (most recent call last) # C:Temp/ipykernel_3208/1081380695.py in <module> # ----> 1 (d1-d3).days[0] # # TypeError: 'int' object is not subscriptable
错误原因
d1和d3都是单个Timestamp对象,二者相减得到的是单个Timedelta对象,它的.days属性返回的是一个整数,整数不支持下标[0]访问,因此触发类型错误。
你之前在小型DataFrame中能运行,大概率是当时误取了索引切片(比如data1.index[-1:]而非data1.index[-1]),切片返回的是DatetimeIndex对象,相减后得到TimedeltaIndex,此时.days返回整数数组,才能用[0]访问。
解决办法
直接去掉下标[0],即可获取两个日期的天数差:
(d1 - d3).days
如果需求是计算首尾索引的天数差,更简洁的写法:
(data1.index[-1] - data1.index[0]).days
内容的提问来源于stack exchange,提问作者Champion
相关产品推荐
相关产品推荐

