簡體   English   中英

Pandas date_range 在月初生成月度數據

[英]Pandas date_range to generate monthly data at beginning of the month

我正在嘗試生成每月數據的日期范圍,其中這一天總是在月初:

pd.date_range(start='1/1/1980', end='11/1/1991', freq='M')

這會生成1/31/19802/29/1980 ,依此類推。 相反,我只想要1/1/19802/1/1980 ,...

我已經看到其他問題詢問有關生成始終在一個月中的特定日期生成數據的問題,答案說這是不可能的,但是月初肯定是可能的!

您可以通過將freq參數從'M'更改為'MS'來做到這一點:

d = pandas.date_range(start='1/1/1980', end='11/1/1990', freq='MS')    
print(d)

現在應該打印:

DatetimeIndex(['1980-01-01', '1980-02-01', '1980-03-01', '1980-04-01',
               '1980-05-01', '1980-06-01', '1980-07-01', '1980-08-01',
               '1980-09-01', '1980-10-01', 
               ...
               '1990-02-01', '1990-03-01', '1990-04-01', '1990-05-01',
               '1990-06-01', '1990-07-01', '1990-08-01', '1990-09-01',
               '1990-10-01', '1990-11-01'],
              dtype='datetime64[ns]', length=131, freq='MS', tz=None)

查看文檔的偏移別名部分。 它指出'M'是月末(月末頻率),而'MS'是月初(月開始頻率)。

值得注意的是,Dimitris 建議的pandas.date_range()'MS'選項使范圍從月初開始,這可能不是預期的:

start = "2020-03-08"
end = "2021-03-08"
pd.date_range(start, end, freq='MS')

結果是

DatetimeIndex(['2020-04-01', '2020-05-01', '2020-06-01', '2020-07-01',
           '2020-08-01', '2020-09-01', '2020-10-01', '2020-11-01',
           '2020-12-01', '2021-01-01', '2021-02-01', '2021-03-01'],
          dtype='datetime64[ns]', freq='MS')

解決方法是僅使用開始日期的年份和月份:

pd.date_range(start[:7], end, freq='MS')

然后會給

DatetimeIndex(['2020-03-01', '2020-04-01', '2020-05-01', '2020-06-01',
           '2020-07-01', '2020-08-01', '2020-09-01', '2020-10-01',
           '2020-11-01', '2020-12-01', '2021-01-01', '2021-02-01',
           '2021-03-01'],
          dtype='datetime64[ns]', freq='MS')

如果您希望每個月的起始日期相同,則可以使用pd.DateOffset()添加偏移量:

pd.date_range(start[:7], end, freq='MS') + pd.DateOffset(days=7)

會給

DatetimeIndex(['2020-03-08', '2020-04-08', '2020-05-08', '2020-06-08',
           '2020-07-08', '2020-08-08', '2020-09-08', '2020-10-08',
           '2020-11-08', '2020-12-08', '2021-01-08', '2021-02-08',
           '2021-03-08'],
          dtype='datetime64[ns]', freq=None)

暫無
暫無

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

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