python - 在 pandas 中提取多索引类型
问题描述
我有一个数据框,我在其中set_index()
使用 3 列。我想提取与每个索引关联的数据类型。我怎样才能有效地做到这一点?我不想这样做,type(df.index.get_level_values())
因为 df 很大。
MWE:
import pandas as pd
df = pd.DataFrame({"id": [1,2,1,2], "time": [1, 1, 2, 2], "val": [1,2,3,4]})
df.set_index(keys=["id", "time"], inplace=True)
type(df.index.get_level_values(1))
#pandas.core.indexes.numeric.Int64Index
我还想知道索引中实际数据的类型(即,看看这个我知道它是整数,但也能得到这样的东西会很好:
type(df.index.get_level_values(1).values[0])
#numpy.int64
解决方案
你可以使用[lev.dtype.type for lev in index.levels]
:
import pandas as pd
df = pd.DataFrame({"id": [1,2,1,2], "time": [1, 1, 2, 2], "val": [1,2,3,4]})
df.set_index(keys=["id", "time"], inplace=True)
index = df.index
print([lev.dtype.type for lev in index.levels])
# [<class 'numpy.int64'>, <class 'numpy.int64'>]
# Alternatively, there is the private attribute, `_inferred_type_levels`,
# but this is probably not what you are looking for.
print(index._inferred_type_levels)
# ['integer', 'integer']
index.levels
是一维索引的 FrozenList:
In [172]: list(index.levels)
Out[172]:
[Int64Index([1, 2], dtype='int64', name='id'),
Int64Index([1, 2], dtype='int64', name='time')]
推荐阅读
- r - 根据另一个数据框填充R中的数据框
- azure - MongoDB Atlas Credit 到底是什么?
- vue.js - Vuejs在真假方法之间切换两个数据不起作用
- haskell - N-body with Yampa FRP, haskell
- deep-learning - 在视频分类模型中覆盖stem方法以改变过滤器通道
- amazon-web-services - 如何在不允许 0.0.0.0/0 的情况下从 AWS EC2 实例访问 ELB?
- javascript - 对象在 PHP LARAVEL 中返回三个打开的关闭引号
- c# - 如何选择 Sterling element Appium Android 移动测试 c#?
- android - 当应用程序被杀死时保持服务运行
- javascript - 创建要在多个方法中多次调用的函数