背景:
我使用熊猫在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'
因此,为了过滤日期,我需要创建这个日期范围列表,并且我正在努力解决这个问题。
这就是我试过的:
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__()
。有什么想法吗?提前谢谢!!
发布于 2022-07-25 08:20:33
在创建datetime.timedelta
期间,有以下参数及其默认值
(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
正如您所观察到的,这里没有months
。datetime.datetime
的实例有您可能认为有用的.replace
方法,请考虑下面的示例
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
注意,并非所有的月份都有相同的天数。
发布于 2022-07-25 08:22:47
使用熊猫,您可以使用:
import numpy as np
N = 5 # number of values
pd.Timestamp('today')-pd.DateOffset(months=1)*np.arange(N)
产出:
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系列:
N = 5
pd.Series(pd.Timestamp('2022-07-25 01:23:45')-pd.DateOffset(months=1)*np.arange(5))
产出:
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]
以方案方式确定期间的数目:
直到结束日期(但不是在此之前):
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))
产出:
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]
https://stackoverflow.com/questions/73105909
复制相似问题