Проверьте и приведите мультииндексные типы - PullRequest
0 голосов
/ 21 ноября 2018

Как я могу проверить тип мультииндекса Pandas для каждого из его уровней?Я пытаюсь получить доступ к определенному уровню, чтобы проверить, является ли его тип тем, каким я его хочу, и если нет, привести его к типу int.

Я пробовал df.index.info(), но безуспешно.Я также проверил методы и атрибуты, описанные в Справочнике по API , хотя я не вижу никаких упоминаний об этом.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Настройка

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')
0 голосов
/ 21 ноября 2018

Использование get_level_values

df.index.get_level_values(0).dtype
Out[19]: dtype('int64')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...