首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从今天开始,我如何创建一个日期范围列表,每3个月返回一次?

从今天开始,我如何创建一个日期范围列表,每3个月返回一次?
EN

Stack Overflow用户
提问于 2022-07-25 08:09:08
回答 2查看 49关注 0票数 1

背景:

我使用熊猫在SQL数据库中附加到已经存在的表中。问题是,我连接到的sql数据库比熊猫所能处理的要大。为了解决这个问题,我要把桌子分成几块。SQL查询将包含WHERE子句,我希望使用日期范围列表来迭代它。

这是我的示例SQL查询(简化):

SELECT * FROM (SELECT col1, col2, col3 ... FROM table)

WHERE DATE(server_time) >= min_date AND DATE(server_time) <= max_date

我想遍历一个日期范围列表来调用这个查询--这是如何格式化server_time字段的:

'2022-03-29 20:08:57'

因此,为了过滤日期,我需要创建这个日期范围列表,并且我正在努力解决这个问题。

这就是我试过的:

代码语言:javascript
运行
复制
num_months = 3
today = datetime.datetime.today()
date_list = [today - datetime.timedelta(months=x) for x in range(num_months)]

我试着创建一个日期范围列表,这些日期范围是按天而不是按月变化的,它起了作用。我是通过将(months=x)改为(days=x)来做到这一点的。然而,当我运行上面的代码时,我得到了'months' is an invalid keyword argument for __new__()。有什么想法吗?提前谢谢!!

EN

回答 2

Stack Overflow用户

发布于 2022-07-25 08:20:33

在创建datetime.timedelta期间,有以下参数及其默认值

代码语言:javascript
运行
复制
(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

正如您所观察到的,这里没有monthsdatetime.datetime的实例有您可能认为有用的.replace方法,请考虑下面的示例

代码语言:javascript
运行
复制
import datetime
d0 = datetime.datetime(2022,3,28,20,8,57)
d1 = d0.replace(month=2)
d2 = d0.replace(month=1)
print(d0)  # 2022-03-28 20:08:57
print(d1)  # 2022-02-28 20:08:57
print(d2)  # 2022-01-28 20:08:57

注意,并非所有的月份都有相同的天数。

票数 0
EN

Stack Overflow用户

发布于 2022-07-25 08:22:47

使用熊猫,您可以使用:

代码语言:javascript
运行
复制
import numpy as np

N = 5 # number of values
pd.Timestamp('today')-pd.DateOffset(months=1)*np.arange(N)

产出:

代码语言:javascript
运行
复制
array([Timestamp('2022-07-25 01:23:45'),
       Timestamp('2022-06-25 01:23:45'),
       Timestamp('2022-05-25 01:23:45'),
       Timestamp('2022-04-25 01:23:45'),
       Timestamp('2022-03-25 01:23:45')], dtype=object)

As系列:

代码语言:javascript
运行
复制
N = 5
pd.Series(pd.Timestamp('2022-07-25 01:23:45')-pd.DateOffset(months=1)*np.arange(5))

产出:

代码语言:javascript
运行
复制
0   2022-07-25 01:23:45
1   2022-06-25 01:23:45
2   2022-05-25 01:23:45
3   2022-04-25 01:23:45
4   2022-03-25 01:23:45
dtype: datetime64[ns]

以方案方式确定期间的数目:

直到结束日期(但不是在此之前):

代码语言:javascript
运行
复制
START = pd.Timestamp('today')
END = pd.Timestamp('2022-01-01')
N = (START.to_period('M')-END.to_period('M')).n

pd.Series(START-pd.DateOffset(months=1)*np.arange(N+1))

产出:

代码语言:javascript
运行
复制
0   2022-07-25 01:23:45
1   2022-06-25 01:23:45
2   2022-05-25 01:23:45
3   2022-04-25 01:23:45
4   2022-03-25 01:23:45
5   2022-02-25 01:23:45
6   2022-01-25 01:23:45
dtype: datetime64[ns]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73105909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档