2013-12-15 2 views
0

* RE Add missing dates to pandas dataframe, предварительно задать вопросПанды Повторное индексирование Команда

import pandas as pd 
import numpy as np 

idx = pd.date_range('09-01-2013', '09-30-2013') 

df = pd.DataFrame(data = [2,10,5,1], index = ["09-02-2013","09-03-2013","09-06-2013","09-07-2013"], columns = ["Events"]) 

df.index = pd.DatetimeIndex(df.index); #question (1) 

df = df.reindex(idx, fill_value=np.nan) 
print(df) 

В приведенном выше сценарии, что делает команда, как отметил один вопрос делать? Если вы оставите эту команду из сценария, df будет переиндексироваться, но часть данных исходного df не будет сохранена. Поскольку в команде DatetimeIndex нет ссылки на данные df, почему данные из начального df теряются?

ответ

2

Краткий ответ: df.index = pd.DatetimeIndex(df.index); преобразует индекс строки df в DatetimeIndex.


Вы должны сделать различие между различными типами индексов. В

df = pd.DataFrame(data = [2,10,5,1], index = ["09-02-2013","09-03-2013","09-06-2013","09-07-2013"], columns = ["Events"]) 

Вы индекс, содержащий строки. При использовании

df.index = pd.DatetimeIndex(df.index); 

конвертировать этот стандартный индекс со строками на индекса с DateTimes (а DatetimeIndex). Таким образом, значения этих двух типов индексов совершенно разные.

Теперь, когда вы реиндексируете с

idx = pd.date_range('09-01-2013', '09-30-2013') 
df = df.reindex(idx) 

где idx также является индекс с DateTimes. Когда вы переиндексируете оригинал df с индексом строки, то нет соответствующих значений индекса, поэтому значения столбца оригинала 10 не сохраняются. Когда вы переиндексируете второй df (после преобразования индекса в индекс datetime), будут совпадать значения индекса, поэтому значения столбца для этих индексов сохраняются.

См. Также http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.reindex.html

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