为了账号安全,请及时绑定邮箱和手机立即绑定

检查和转换多索引类型

检查和转换多索引类型

一只名叫tom的猫 2021-08-24 16:37:39
如何检查 Pandas 的每个级别的多索引类型?我正在尝试访问特定级别以检查它的类型是否是我想要的类型,如果不是,则将其强制转换为int类型。我试过df.index.info()没有成功。我还检查了API 参考中描述的方法和属性,但我没有看到任何提及。
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

设置

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


查看完整回答
反对 回复 2021-08-24
?
四季花海

TA贡献1811条经验 获得超5个赞

使用 get_level_values


df.index.get_level_values(0).dtype

Out[19]: dtype('int64')


查看完整回答
反对 回复 2021-08-24
  • 2 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信