在 DateTime 对象 python 中查找日期的索引
Posted
技术标签:
【中文标题】在 DateTime 对象 python 中查找日期的索引【英文标题】:Finding the index of a date in a DateTime object python 【发布时间】:2018-10-12 12:26:15 【问题描述】:我有一个列表,其中包含我使用以下方法创建的日期:
dates_list = pd.date_range(startdate, num_of_periods, freq = 'MS')
^将日期范围存储在dates_list
如果我执行 print(dates_list),这将正确返回我的每月日期列表。
我想要做的是在给定范围内的特定日期寻找索引号。我试过了:
dates_list.index(call_date)
^^其中call_date
是我试图查找索引号的日期
我收到一条错误消息,内容如下:
TypeError: 'DatetimeIndex' object is not callable
如果我在更简单的列表上尝试相同的命令,
即:simple_list = ['cheese', 'banana', 'mushroom', 'apple' ...]
simple_list.index('banana')
它返回 1
。
如何从日期列表中获取索引值?有什么我必须做的不同的事情吗?
任何反馈都将不胜感激。谢谢你。
【问题讨论】:
【参考方案1】:你有一个DatetimeIndex
对象,而不是一个列表。您可以通过打印type(dates_list)
来确认这一点。 DatetimeIndex
对象没有 index
方法。
您可以手动检索索引,如下所示:
dates_list = pd.date_range(start=pd.Timestamp('now').normalize(), periods=10, freq='D')
print(dates_list)
# DatetimeIndex(['2018-05-02', '2018-05-03', '2018-05-04', '2018-05-05',
# '2018-05-06', '2018-05-07', '2018-05-08', '2018-05-09',
# '2018-05-10', '2018-05-11'],
# dtype='datetime64[ns]', freq='D')
res = (dates_list == pd.Timestamp('2018-05-04')).argmax()
# 2
或者,您可以使用生成器。此方法仅适用于您认为所需日期接近 DatetimeIndex
开头的较大范围。
x = pd.Timestamp('2018-05-04')
res = next((i for i, j in enumerate(dates_list) if j == x), None)
【讨论】:
以上是关于在 DateTime 对象 python 中查找日期的索引的主要内容,如果未能解决你的问题,请参考以下文章
Python:测试string是否等于datetime对象?
Python标准库datetime之datetime模块详解