2014-11-24 3 views
1

У меня есть рамка данных pandas с мультииндексисом. К сожалению, один из показателей дает годы как строкаПреобразование строки в целочисленный индекс данных для данных pandas

например. '2010', '2011'

Как их преобразовать в целые числа?

Более конкретно

MultiIndex(levels=[[u'2010', u'2011'], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]], 
     labels=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
10, 11, 12, , ...]], names=[u'Year', u'Month']) 

.

df_cbs_prelim_total.index.set_levels(df_cbs_prelim_total.index.get_level_values(0).astype('int')) 

похоже, но не на месте. Любой правильный способ их изменения?

Приветствия, Майк

+1

вы можете просто конвертировать перед тем, как назначить их вашему индексу? что представляется наименее болезненным методом – EdChum

ответ

1

будет, вероятно, будет чище, чтобы сделать это, прежде чем назначить его в качестве индекса (как @EdChum указывает), но когда у вас уже есть, как индекс, вы действительно можете использовать set_levels, чтобы изменить один ярлыков уровня вашего мультииндекса. Немного чище, как ваш код (вы можете использовать index.levels[..]):

In [165]: idx = pd.MultiIndex.from_product([[1,2,3], ['2011','2012','2013']]) 

In [166]: idx 
Out[166]: 
MultiIndex(levels=[[1, 2, 3], [u'2011', u'2012', u'2013']], 
      labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 0, 1, 2, 0, 1, 2]]) 

In [167]: idx.levels[1] 
Out[167]: Index([u'2011', u'2012', u'2013'], dtype='object')  

In [168]: idx = idx.set_levels(idx.levels[1].astype(int), level=1) 

In [169]: idx 
Out[169]: 
MultiIndex(levels=[[1, 2, 3], [2011, 2012, 2013]], 
      labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 0, 1, 2, 0, 1, 2]]) 

Вы должны передать его, чтобы сохранить изменения (как это сделано выше, в вашем случае это будет df_cbs_prelim_total.index = df_cbs_prelim_total.index.set_levels(...))

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