2016-09-27 6 views
1

я обрабатывать DataFrame, что индекс является строка, год-месяц, например:Панды DatetimeIndex странное поведение

index = ['2007-01', '2007-03', ...] 

однако, индекс не является полным. например 2007-02 отсутствует. Я хочу переиндексировать DataFrame с полным индексом.

То, что я пробовал:

In [60]: pd.DatetimeIndex(start='2007-01', end='2007-12', freq='M') 
Out[60]: 
DatetimeIndex(['2007-01-31', '2007-02-28', '2007-03-31', '2007-04-30', 
      '2007-05-31', '2007-06-30', '2007-07-31', '2007-08-31', 
      '2007-09-30', '2007-10-31', '2007-11-30'], 
      dtype='datetime64[ns]', freq='M') 

Индекс концы каждого месяца.

In [64]: pd.DatetimeIndex(['2007-01', '2007-03', '2007-04', '2007-05']) 
Out[64]: DatetimeIndex(['2007-01-01', '2007-03-01', '2007-04-01', '2007-05-01'], dtype='datetime64[ns]', freq=None) 

Индекс начинается каждый месяц.

Как справиться с этой проблемой?

+0

Параметр '«Частота M'' это конец месяца для начала использовать '» MS'' для начала месяца см [документы] (http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases) – EdChum

ответ

2

Я думаю, вам нужно добавить параметр freq='MS' если частота потребность первый день месяца:

print (pd.DatetimeIndex(start='2007-01', end='2007-12', freq='MS')) 
DatetimeIndex(['2007-01-01', '2007-02-01', '2007-03-01', '2007-04-01', 
       '2007-05-01', '2007-06-01', '2007-07-01', '2007-08-01', 
       '2007-09-01', '2007-10-01', '2007-11-01', '2007-12-01'], 
       dtype='datetime64[ns]', freq='MS') 

Ссылка на Offset Aliases in pandas documentation, спасибо EdChum.

Другим решением является использование PeriodIndex для генерации месяцев период:

print (pd.PeriodIndex(start='2007-01', end='2007-12', freq='M')) 
PeriodIndex(['2007-01', '2007-02', '2007-03', '2007-04', '2007-05', '2007-06', 
      '2007-07', '2007-08', '2007-09', '2007-10', '2007-11', '2007-12'], 
      dtype='int64', freq='M') 

 Смежные вопросы

  • Нет связанных вопросов^_^