如何查看每个级别的熊猫的Multiindex类型?
我正在尝试访问特定级别,以检查其类型是否是我想要的类型,如果不是,请将其强制转换为int
类型。
我尝试df.index.info()
失败。我也检查了API Reference中描述的方法和属性,尽管没有发现任何提及。
答案 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
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')