代码之家  ›  专栏  ›  技术社区  ›  Cedric H.

pandas将多个索引的所有级别都转换为另一种类型

  •  1
  • Cedric H.  · 技术社区  · 7 年前

    我有一个多索引,我想将它的所有级别转换为浮动。

    我正在做以下工作:

            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 回复  |  直到 7 年前
        1
  •  2
  •   jezrael    7 年前

    你可以使用 get_level_values 对于选定级别,转换为 float s和last:

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