Pandas date_range для генерации ежемесячных данных в начале месяца

Я пытаюсь создать диапазон дат ежемесячных данных, где день всегда в начале месяца:

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

Это генерирует 1/31/1980, 2/29/1980 и т.д. Вместо этого я просто хочу 1/1/1980, 2/1/1980,...

Я видел другой вопрос о генерации данных, которые всегда в определенный день месяца, с ответами, говорящими, что это невозможно, но начало месяца наверняка должно быть возможным!

Ответ 1

Вы можете сделать это, изменив аргумент 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' для начала (начальная частота месяца).

Ответ 2

У меня такой же запрос, но я хочу знать, нужен ли мне формат, такой как январь-1990, февраль-1990... Как мы можем его получить? что я должен использовать с Freq = M или что-то еще? потому что он показывает в этом формате "2014-01-31", "2014-02-28" с freq = m.

Любая поддержка или помощь будут оценены.

Ответ 3

@Jim Можете ли вы предложить, как получить диапазон дат, используя "pd.date_range", начиная с "3/1/1980" до "11/1/1990" с freq.of'3M '?