获取熊猫多索引的 dtype

Ale*_*lex 7 python python-3.x pandas

如何在不打印出所有值的情况下在熊猫中找到dtypeaMultiIndex的值(df.index例如,如果您键入,就会发生这种情况)。我只想知道索引的名称及其类型。

前任:

df = pd.DataFrame({"a": np.arange(100000), "b": np.arange(100000)[::-1]}, index=pd.MultiIndex.from_arrays([np.arange(100000), np.arange(100000)[::-1]], names=["i1", "i2"]))
Run Code Online (Sandbox Code Playgroud)

正在做:

df.index
Run Code Online (Sandbox Code Playgroud)

实际打印需要一些时间,对于一个太长的大 df。

Sco*_*ton 13

使用 get_level_values:

df.index.get_level_values(0).dtype
dtype('int64')
Run Code Online (Sandbox Code Playgroud)

df.index.get_level_values(1).dtype
dtype('int64')
Run Code Online (Sandbox Code Playgroud)

对于名称使用:

df.index.names
FrozenList(['i1', 'i2'])
Run Code Online (Sandbox Code Playgroud)


cs9*_*s95 10

熊猫 >= 1.3 [预计]

即将推出您附近的发行版,您MultiIndex.dtypes很快就可以:

df.index.dtypes

i1    int64
i2    int64
dtype: object 
Run Code Online (Sandbox Code Playgroud)

对于旧版本,如果您的索引不太大,您可以先使用 转换为框架to_frame,然后查询 dtypes:

df.index.to_frame().dtypes

i1    int64
i2    int64
dtype: object
Run Code Online (Sandbox Code Playgroud)


Zax*_*axR 6

基于@Scott Boston 的精彩回答,我编写了这个函数来快速检查多索引 dfs 的所有级别的 dtypes,只是想分享一下:

def index_level_dtypes(df):
    return [f"{df.index.names[i]}: {df.index.get_level_values(n).dtype}"
            for i, n in enumerate(df.index.names)]
Run Code Online (Sandbox Code Playgroud)