我正在尝试以列表格式获取 3 天的回溯日期。到目前为止我所做的是:
datelist = pd.date_range(pd.datetime.today(), periods=3).tolist()
>>> datelist
[Timestamp('2018-01-31 20:03:51.068944', freq='D'), Timestamp('2018-02-01 20:03:51.068944', freq='D'), Timestamp('2018-02-02 20:03:51.068944', freq='D')]
>>> datelist = pd.date_range(pd.datetime.today(), periods=-3).tolist()
>>> datelist
[]
>>> datelist = pd.date_range(pd.datetime.today()-1, periods=-3).tolist()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'int'
首先,我得到了 3 天的远期日期。
但我想要向后 3 天而不是向前,但如果我执行 -3
它会给出 []
。我愿意过今天的日子……指的是今天的前一天。但出现错误。
我愿意获取以下格式的输出列表:
datelist = ['20180130','20180129','20180128']
请建议我可以尝试什么。
最佳答案
从今天起由 date_range
生成首先减去过去的第一天并添加 sort_values
与 strftime
:
N = 3
datelist = (pd.date_range(pd.datetime.today() - pd.offsets.DateOffset(days=N), periods=N)
.sort_values(ascending=False)
.strftime('%Y%m%d'))
<小时/>
datelist = (pd.date_range(pd.datetime.today() - pd.Timedelta(days=N), periods=N)
.sort_values(ascending=False)
.strftime('%Y%m%d'))
print (datelist)
['20180130' '20180129' '20180128']
<小时/>
第一个答案:
使用列表理解
:
a = [(x - pd.offsets.DateOffset(days=3)).strftime('%Y%m%d') for x in datelist]
<小时/>
a = [(x - pd.Timedelta(days=3)).strftime('%Y%m%d') for x in datelist]
print (a)
['20180128', '20180129', '20180130']
或者转换为DatetimeIndex
并减去Timedelta
:
a = (pd.DatetimeIndex(datelist) - pd.Timedelta(days=3)).strftime('%Y%m%d').tolist()
<小时/>
a = (pd.DatetimeIndex(datelist) - pd.offsets.DateOffset(days=3)).strftime('%Y%m%d').tolist()
关于python - Pandas 以某种模式向前提供日间范围而不是向后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48544798/