如何在pandas date_range方法中包含结束日期?

sro*_*uex 11 python string datetime range pandas

pd.date_range('2016-01', '2016-05', freq='M', ).strftime('%Y-%m')上个月开始2016-04,但我期待它2016-05.在我看来,这个函数的行为与range方法类似,其中end参数不包含在返回数组中.

有没有办法在返回的数组中包含结束月份,而不处理结束月份的字符串?

piR*_*red 6

一种方法可以做到这一点,而不必弄清楚月份结束自己.

pd.date_range(*(pd.to_datetime(['2016-01', '2016-05']) + pd.offsets.MonthEnd()), freq='M')

DatetimeIndex(['2016-01-31', '2016-02-29', '2016-03-31', '2016-04-30',
           '2016-05-31'],
          dtype='datetime64[ns]', freq='M')
Run Code Online (Sandbox Code Playgroud)


roo*_*oot 6

.union初始化后,您可以使用添加下一个逻辑值date_range.它应该按照任何频率编写:

d = pd.date_range('2016-01', '2016-05', freq='M')
d = d.union([d[-1] + 1]).strftime('%Y-%m')
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用period_range而不是date_range.根据您的意图,这可能不是正确的选择,但它满足您的问题:

pd.period_range('2016-01', '2016-05', freq='M').strftime('%Y-%m')
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,结果输出都是预期的:

['2016-01' '2016-02' '2016-03' '2016-04' '2016-05']
Run Code Online (Sandbox Code Playgroud)

  • 感谢 period_range,这就是我一直在寻找的。 (4认同)

zwe*_*wep 6

对于后来的人群.您也可以尝试使用月 - 开始频率.

>>> pd.date_range('2016-01', '2016-05', freq='MS', format = "%Y-%m" )
DatetimeIndex(['2016-01-01', '2016-02-01', '2016-03-01', '2016-04-01',
               '2016-05-01'],
              dtype='datetime64[ns]', freq='MS')
Run Code Online (Sandbox Code Playgroud)