python - 检查并转换多索引类型

标签 python pandas

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

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

最佳答案

设置

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
<小时/>

多索引的基本剖析

级别

pandas.Index 对象的frozenlist。这些 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')]
<小时/>

标签

这是数组的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 访问索引中的值

df.index.get_level_values(1)

Index(['X', 'Y', 'X', 'Y'], dtype='object', name='lvl1')

这与使用 label 对象切片 level 对象相同

df.index.levels[1][df.index.labels[1]]

Index(['X', 'Y', 'X', 'Y'], dtype='object', name='lvl1')

关于python - 检查并转换多索引类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53414342/

相关文章:

python - Plotly:如何只显示点击的行?

python - 如何将 Panda 中的多重索引更改为列

python - 在 seaborn 条形图中绘制百分比

python - 难以替换 Pandas 列中的值

python - 如何使用python在Excel单元格中显示嵌入的文本文件

python - 在 BeautifulSoup 中安全地使用 .text.strip() 的优雅方式?

python - 从 CSV 文件导入/导出嵌套字典

python - 如何在 Pandas 中执行相当于相关子查询的操作

Python/Pandas 运行总计

python Chef 在控制台而不是脚本中工作