大Pandas的活动范围向前,而不是向后,并在一定的模式

2024-04-18 09:09:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试以列表格式获取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天的交货期

但是我想要向后三天,而不是向前三天,但是如果我这样做了,它就会给我。我愿意过今天的日子。。。是指前一天。但是有错误

我愿意得到以下格式的输出列表:

datelist = ['20180130','20180129','20180128']

好心的,建议我可以尝试什么


Tags: most列表todaydatetimedate格式rangetimestamp
1条回答
网友
1楼 · 发布于 2024-04-18 09:09:53

对于从今天开始按^{}第一个减法生成过去第一天的减法,并将^{}^{}相加:

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']

第一个答案:

使用list comprehension

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()

相关问题 更多 >