检查并转换多索引类型

时间:2018-11-21 14:31:44

标签: python pandas

如何查看每个级别的熊猫的Multiindex类型? 我正在尝试访问特定级别,以检查其类型是否是我想要的类型,如果不是,请将其强制转换为int类型。

我尝试df.index.info()失败。我也检查了API Reference中描述的方法和属性,尽管没有发现任何提及。

2 个答案:

答案 0 :(得分:1)

使用get_level_values

df.index.get_level_values(0).dtype
Out[19]: dtype('int64')

答案 1 :(得分:1)

设置

idx = pd.MultiIndex.from_product([range(2), [*'XY']], names=['lvl0', 'lvl1'])
df = pd.DataFrame(1, idx, idx)
df

lvl0       0     1   
lvl1       X  Y  X  Y
lvl0 lvl1            
0    X     1  1  1  1
     Y     1  1  1  1
1    X     1  1  1  1
     Y     1  1  1  1

MultiIndex的基本解剖

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_values

访问索引中的值
df.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')