如何从python中的日期字符串生成范围日期?

时间:2015-08-09 09:03:44

标签: python python-2.7 datetime pandas range

我的日期格式如下图所示:

    {
      "amount": 599400,
      "date_cart_closed": "2015-03"
    },
    {
      "amount": 575856,
      "date_cart_closed": "2015-01"
    },
    {
      "amount": 2216490,
      "date_cart_closed": "2015-05"
    }

我们的格式类似于2015-03。基准日期从2011-01-01开始固定,直到用户输入UNIX_TIMESTAMP之类的1343287040日期为止。

现在问题是我有开始日期和结束日期。在这个范围内,我必须填补空白。说实话,我没有2011-012011-022015-03等。如何填补这些空白?有没有办法处理这种情况?

EDIT1:
似乎pandas根据月份创建范围日期。我做了以下的生成月份:

pandas.date_range(start='20140101', end='20140501', freq='M')

其输出如下:

DatetimeIndex(['2014-01-31', '2014-02-28', '2014-03-31', '2014-04-30'], dtype='datetime64[ns]', freq='M', tz=None)

它以某种方式解决了我的问题,但我需要输出:2014-01而不是2014-01-01。有没有办法格式化输出?

2 个答案:

答案 0 :(得分:3)

这是一个单行。您可以使用X-HTTP-Method-Override将datetime对象转换为每月频率,然后使用numpy.astype('<M8[M]')来获取unicode字符串。此操作是矢量化的,对于大型数据集来说非常快。

.astype(str)

答案 1 :(得分:1)

将您的日期转换为整数,自0年以来的月数:

def yearmonth_to_ordinal(date_string):
    year, month = map(int, date_string.split('-'))
    return year * 12 + (month - 1)

因此,2015-01变为24180,2015-03变为24182等。您现在可以创建序数范围。

要返回日期字符串,请使用模运算:

def ordinal_to_yearmonth(ordinal):
    year, month = divmod(ordinal, 12)
    return '{:04d}-{:02d}'.format(year, month + 1)

演示:

>>> yearmonth_to_ordinal('2015-05')
24184
>>> ordinal_to_yearmonth(yearmonth_to_ordinal('2015-05') + 7)
'2015-12'