我有一个带有多索引的pandas数据帧。不幸的是,其中一个索引将年份作为字符串
e.g。 '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'))
似乎是这样做的,但不是在原地。有没有改变它们的正确方法?
干杯, 麦克
答案 0 :(得分:2)
在将其指定为索引(如@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(...)
)