检查和转换多索引类型

如何检查 Pandas 的每个级别的多索引类型?我正在尝试访问特定级别以检查它的类型是否是我想要的类型,如果不是,则将其强制转换为int类型。

我试过df.index.info()没有成功。我还检查了API 参考中描述的方法和属性,但我没有看到任何提及。


一只名叫tom的猫
浏览 191回答 2
2回答

胡说叔叔

设置idx = pd.MultiIndex.from_product([range(2), [*'XY']], names=['lvl0', 'lvl1'])df = pd.DataFrame(1, idx, idx)dflvl0       0     1   lvl1       X  Y  X  Ylvl0 lvl1            0    X     1  1  1  1     Y     1  1  1  11    X     1  1  1  1     Y     1  1  1  1MultiIndex 的基本剖析levels是frozenlist的pandas.Index对象。这些pandas.Index对象中的每一个都应包含唯一值。如果这些级别索引对象不是唯一的,则可能有问题。[*map(type, df.index.levels)][pandas.core.indexes.numeric.Int64Index, pandas.core.indexes.base.Index]你可以得到他们的 dtype[l.dtype for l in df.index.levels][dtype('int64'), dtype('O')]labels这是一个frozenlist数组。每个级别索引都有一个标签数组。相应的标签数组包含对正在显示的级别值的引用。[*map(type, df.index.labels)][pandas.core.indexes.frozen.FrozenNDArray, pandas.core.indexes.frozen.FrozenNDArray]print(*df.index.labels, sep='\n')FrozenNDArray([0, 0, 1, 1], dtype='int8')FrozenNDArray([0, 1, 0, 1], dtype='int8')get_level_values您可以访问索引中的值 get_level_valuesdf.index.get_level_values(1)Index(['X', 'Y', 'X', 'Y'], dtype='object', name='lvl1')这level与用label对象切片对象相同df.index.levels[1][df.index.labels[1]]Index(['X', 'Y', 'X', 'Y'], dtype='object', name='lvl1')

四季花海

使用 get_level_valuesdf.index.get_level_values(0).dtypeOut[19]: dtype('int64')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python