在 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模块详解

datetime怎么改

python-time-datetime

如何获得自 1970 年 1 月 1 日以来 Python 日期时间对象的秒数?

Python深度学习之路时间序列数据