python - 如何在没有闰日的情况下创建日期时间列表?
问题描述
我需要从 2007-01-01 00:00 到 2016-01-01 00:00 每分钟创建一个日期时间元素列表,但没有 2 月 29 日。我的代码是下一个:
dates = []
date0 = datetime(2007, 1, 1, 0, 0)
delta = td(minutes=1)
while date0 < datetime(2016, 1, 1, 0, 0):
if date0.date != date(2008, 2, 29) and date0.date != date(2012, 2, 29):
dates.append(date0)
date0 = date0 + delta
我应该有一个 9 年没有 29.02 的清单。但我的日期列表仍然包含 2008 年 2 月 29 日和 2012 年。我试图应用此代码:
while date0 < datetime(2016, 1, 1, 0, 0):
if date0.month != 2 and date0.day != 29:
dates.append(date0)
date0 = date0 + delta
但结果我有一个列表,其中不包含适当的天数,只有 8 年零 14 天。您对解决问题有任何解决方案或想法吗?
解决方案
您可以使用pandas
流行的外部数据操作包轻松完成此操作:
In []:
import pandas as pd
dr = pd.date_range(start='1/1/2007', end='1/1/2016', freq='1min')
dates = dr[(dr.day != 29) | (dr.month != 2)]
len(dr), len(dates)
Out[]:
(4733281, 4730401)
这需要700ms
在我的机器上进行。
In []:
dates
Out[]:
DatetimeIndex(['2007-01-01 00:00:00', '2007-01-01 00:01:00', '2007-01-01 00:02:00', '2007-01-01 00:03:00',
'2007-01-01 00:04:00', '2007-01-01 00:05:00', '2007-01-01 00:06:00', '2007-01-01 00:07:00',
'2007-01-01 00:08:00', '2007-01-01 00:09:00',
...
'2015-12-31 23:51:00', '2015-12-31 23:52:00', '2015-12-31 23:53:00', '2015-12-31 23:54:00',
'2015-12-31 23:55:00', '2015-12-31 23:56:00', '2015-12-31 23:57:00', '2015-12-31 23:58:00',
'2015-12-31 23:59:00', '2016-01-01 00:00:00'],
dtype='datetime64[ns]', length=4730401, freq=None)
推荐阅读
- highcharts - Highcharts Multiple Series Drilldown to Multiple Series - 仅适用于该系列中的最后一组
- c# - UWP - 即使包含在功能中,DriveInfo 也会拒绝对可移动存储的访问
- java - SpringResourceTemplateResolver 的 setPrefix 方法没有设置请求的路径
- java - RecyclerView 新项目添加问题
- php - 在 PHP 中创建范围的两个随机数
- haskell - 评估 AST 中的变量赋值
- docker - 在 Docker 容器中运行 Celery 任务时出现问题
- javascript - 如何从文档中获取 Cesium 查看器的实例?
- reactjs - 调用javascript函数时使用反应钩子的正确方法是什么?
- sql - 函数中 return 关键字的使用与存储过程不同吗?