簡體   English   中英

奇怪的熊貓 date_range 行為

[英]Strange pandas date_range behavour

當開始日期和結束日期之間的小時數不匹配並且頻率設置為Months時,pandas date_range()函數會顯示一種奇怪的行為。

>>> pd.date_range("2020-05-31 22:00:00", "2020-08-29 21:00:00", freq="1M")

DatetimeIndex(['2020-05-31 22:00:00', '2020-06-30 22:00:00'], dtype='datetime64[ns]', freq='M')

在這個例子中,我希望 '2020-07-31 22:00:00' 出現在索引中,但事實並非如此。

盡管如此,以下示例仍按預期工作:

>>> pd.date_range("2020-05-31 22:00:00", "2020-08-29 22:00:00", freq="1M")

DatetimeIndex(['2020-05-31 22:00:00', '2020-06-30 22:00:00',
               '2020-07-31 22:00:00'],
              dtype='datetime64[ns]', freq='M')

>>> pd.date_range("2020-05-31 22:00:00", "2020-08-29 23:00:00", freq="1M")

DatetimeIndex(['2020-05-31 22:00:00', '2020-06-30 22:00:00',
               '2020-07-31 22:00:00'],
              dtype='datetime64[ns]', freq='M')

如果提供 Datetime 對象而不是字符串,也會發生這種情況:

>>> s = pd.to_datetime("2020-05-31 22:00:00", format="%Y-%m-%d %H:%M:%S")
>>> e = pd.to_datetime("2020-08-29 21:00:00", format="%Y-%m-%d %H:%M:%S")

>>> pd.date_range(s, e, freq="1M")
DatetimeIndex(['2020-05-31 22:00:00', '2020-06-30 22:00:00'], dtype='datetime64[ns]', freq='M')

這是一個錯誤還是我遺漏了什么?

熊貓 v1.1.0

我發現使用的時間少於開始日期中提到的時間不會列出最后的結果,或者您可以使用大於開始日期的時間

>>> pd.date_range("2020-05-31 22:00:00", "2020-08-29 23:00:00", freq="1M")

DatetimeIndex(['2020-05-31 22:00:00', '2020-06-30 22:00:00',
               '2020-07-31 22:00:00'],
              dtype='datetime64[ns]', freq='M')

或者

您可以使用 Pandas DateOffset 函數代替使用“1M”作為頻率值,這將幫助您獲得所需的結果。

>>> pd.date_range("2020-05-31 22:00:00", "2020-08-29 21:00:00", freq=pd.DateOffset(months=1))

DatetimeIndex(['2020-05-31 22:00:00', '2020-06-30 22:00:00',
               '2020-07-30 22:00:00'],
              dtype='datetime64[ns]', freq='<DateOffset: months=1>')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM