将字符串转换为整数 pandas 数据帧索引

Mik*_*ike 5 dataframe 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'])
Run Code Online (Sandbox Code Playgroud)

df_cbs_prelim_total.index.set_levels(df_cbs_prelim_total.index.get_level_values(0).astype('int'))
Run Code Online (Sandbox Code Playgroud)

似乎做到了,但还不到位。有什么正确的方法可以改变它们吗?

干杯,迈克

jor*_*ris 3

在将其分配为索引之前(正如 @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]])
Run Code Online (Sandbox Code Playgroud)

您必须重新分配它才能保存更改(如上所述,在您的情况下,这将是df_cbs_prelim_total.index = df_cbs_prelim_total.index.set_levels(...)