熊猫将多索引的所有级别转换为另一种类型

时间:2018-07-22 09:19:46

标签: python python-3.x pandas

我有一个多索引,我想将其所有级别转换为浮点数。

我正在执行以下操作:

        my_dataframe.index.map(lambda i: (float(i[0]), float(i[1])))

但是,如果我有很多级别,这似乎不能很好地“缩放”。

我尝试过:

        my_dataframe.index.astype(np.float, copy=False)

但失败并显示TypeError

TypeError: Setting <class 'pandas.core.indexes.multi.MultiIndex'> dtype to anything other than object is not supported

实现这一目标的最佳/最简单的方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用get_level_values来选择级别,转换为float,最后一次:

a = my_dataframe.index.get_level_values(0).astype(float)
b = my_dataframe.index.get_level_values(1).astype(float)

my_dataframe.index = [a,b]

或者:

my_dataframe = my_dataframe.set_index([a,b])

使用MultiIndex.set_levels的另一种解决方案:

a = my_dataframe.index.levels[0].astype(float)
b = my_dataframe.index.levels[1].astype(float)
my_dataframe.index = my_dataframe.index.set_levels([a,b])

或者:

my_dataframe = my_dataframe.set_index(my_dataframe.index.set_levels([a,b]))