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

Pandas 将字符串转换为整型数据帧索引,pandas,dataframe,Pandas,Dataframe,我有一个带有多索引的熊猫数据帧。不幸的是,其中一个指数以年为字符串 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, 1

我有一个带有多索引的熊猫数据帧。不幸的是,其中一个指数以年为字符串

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'])

似乎可以做到,但不到位。有没有合适的方法来改变它们

干杯,
Mike在将其指定为索引(正如@EdChum所指出的)之前可能会更清楚地这样做,但是当您已经将其指定为索引时,您确实可以使用
set_levels
来更改多索引的某个级别的标签之一。代码更加简洁(您可以使用
索引.levels[…]
):


您必须重新分配它以保存更改(如上所述,在您的情况下,这将是
df\u cbs\u prelim\u total.index=df\u cbs\u prelim\u total.index.set\u levels(…)

在将它们分配到您的索引之前,您可以转换它们吗?这似乎是最不痛苦的方法。请注意,pandas多索引的
levels
方法似乎可以按字典顺序对各个级别进行排序(即使这些级别是int类型)。这可能会在不维护多索引元组的情况下对给定级别的索引标签重新排序(例如,如果索引为1-100,则这些索引将被重新排序为1,10100,2,20,3…,与其他级别无关)。在这种情况下,应该在
set\u levels()
中显式地对转换后的索引进行排序。在上面的示例中(输入单元格[168]):
idx=idx.set_levels(idx.levels[1].astype(int).sort_values(),level=1)
df_cbs_prelim_total.index.set_levels(df_cbs_prelim_total.index.get_level_values(0).astype('int'))
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]])