從pd.date_range('2016-01', '2016-05', freq='M',).strftime('%Y-%m')
,上個月是2016-04
,但我期待它是2016-05
。在我看來,這個函數的行爲類似於range
方法,其中end參數不包含在返回數組中。如何在pandas date_range方法中包含結束日期?
有沒有辦法讓末月包含在返回數組中,而不處理結束月份的字符串?
從pd.date_range('2016-01', '2016-05', freq='M',).strftime('%Y-%m')
,上個月是2016-04
,但我期待它是2016-05
。在我看來,這個函數的行爲類似於range
方法,其中end參數不包含在返回數組中。如何在pandas date_range方法中包含結束日期?
有沒有辦法讓末月包含在返回數組中,而不處理結束月份的字符串?
做到這一點的一種方式指定的日期時包含的一天。
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')
我不這麼認爲。 您需要添加的(N + 1)邊界
pd.date_range('2016-01', '2016-06', freq='M').strftime('%Y-%m')
的開始和結束日期是嚴格的包容性。因此,如果指定,那麼 將不會生成這些日期之外的任何日期。 http://pandas.pydata.org/pandas-docs/stable/timeseries.html
無論哪種方式,你必須手動添加一些信息。我相信再增加一個月並不是很多工作。
當freq ='D''時,這個文檔的引用是成立的,當它是月份時,它不適用於結束日期艱難。 – srodriguex
好的。它不會改變你需要添加你的邊界的事實:) –
沒有搞清楚月結束自己搞亂在date_range
電話
pd.date_range('2016-01-31', '2016-05-31', freq='M',).strftime('%Y-%m')
array(['2016-01', '2016-02', '2016-03', '2016-04', '2016-05'],
dtype='|S7')
如果你手動添加一天,那麼你可能只需再增加一個月,你不認爲 –
不。我可以想象一個需要和理由,關於情況。 – piRSquared
您可以使用.union
初始化date_range
後添加的下一個邏輯值。它應該作爲任何頻率來寫:
d = pd.date_range('2016-01', '2016-05', freq='M')
d = d.union([d[-1] + 1]).strftime('%Y-%m')
或者,你可以使用period_range
而不是date_range
。根據你打算做什麼,這可能不是用正確的事情,但它滿足了你的問題:
pd.period_range('2016-01', '2016-05', freq='M').strftime('%Y-%m')
在這兩種情況下,如預期的輸出結果:
['2016-01' '2016-02' '2016-03' '2016-04' '2016-05']
感謝period_range,那就是我一直在尋找的東西。 – Tickon
對於後來的人羣。您也可以嘗試使用月開始頻率。
>>> 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')
有了這個解決方案,我不需要搗亂天和(n + 1)個月。 – srodriguex