大熊猫给出了前一天的范围,而不是落后和某种模式

时间:2018-01-31 14:41:03

标签: python python-2.7 pandas datetime

我试图以列表格式获取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']

请建议我尝试一下。

1 个答案:

答案 0 :(得分:2)

从今天开始按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']

第一个回答:

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