Pandas, Excel-Import и MultiIndex

Я новичок в пандах и в настоящее время пытаюсь провести анализ данных Excel в следующей схеме:

введите описание изображения здесь

Моя цель – визуализация с помощью индексных меток XYZ , CDE , EFG , HU по оси x и соответствующих Perc значений Yes , ProbYes , X , ProbNo , No уложенных по оси y.

В настоящее время я разбираю данные Excel в panda DataFrame через код:

 import pandas as pd path = 'x1.xlsx' x = pd.ExcelFile(path) sheets = x.sheet_names table = x.parse(sheets[0], header=2) # take line 2 as column-names 

Сгенерированный MultiIndex table выглядит нормально:

 >>> table.index MultiIndex(levels=[[u'Individual', u'Summary'], [u'ABC', u'CDE', u'EFG', u'HIJ'], [u'Abs', u'Perc']], labels=[[0, -1, -1, -1, -1, -1, -1, -1, 1, -1], [0, -1, 1, -1, 2, -1, 3, -1, -1, -1], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]]) 

Однако доступ к определенной строке невозможен:

 >>> table.ix[('Individual', 'CDE')] KeyError: 'Key length (2) was greater than MultiIndex lexsort depth (0)' 

… и нет возможности доступа или фильтрации / удаления столбца, содержащего индексы строк

 >>> table.index.names FrozenList([None, None, None]) 

т.е. индексы не имеют имен, и, я думаю, я не могу получить к ним доступ?

Я попытался упростить структуру данных с помощью альтернативного анализа:

 >>> table2 = x.parse(sheets[0], header=2, skiprows=2, parse_cols='B,:I') 

что, однако, действительно не помогло.

Изменить :

Это помогает sort :

 >>> table.sort(inplace=True) >>> table[:4] 

выходы:

введите описание изображения здесь

и с этой таблицей я не могу сделать свой анализ …

One Solution collect form web for “Pandas, Excel-Import и MultiIndex”

Я думаю, что после

 table.sort(inplace=True) 

вы можете получить доступ

 table.ix[('Individual', 'CDE')] 

РЕДАКТИРОВАТЬ:

Я знаю, почему – ваш файл excel объединил ячейки, такие как A4:A11 . Когда вы загружаете его в pandas DataFrame, индекс Individual находится только в формате A4 а индексы в A5:A11 – все nan

Я могу подумать об одном:

 table =table.reset_index().fillna(method='ffill').set_index(['level_0','level_1','level_2']) #reset_index() automatically gives column names level_? 

Тогда вам хорошо идти:

 table.ix[('Individual','CDE')] 
  • фильтрация сгруппирована df в пандах
  • Индекс относительной силы в пандах python
  • Проверьте, находится ли строка в кадре данных pandas
  • Предоставление столбца нескольких индексов / заголовков
  • Вложенный словарь для MultiIndex pandas DataFrame (3 уровня)
  • Как удалить фигурные скобки, апострофы и квадратные скобки из словарей в кадре данных Pandas (Python)
  • Получить список содержимого HDF5 (Pandas HDFStore)
  • как я могу преобразовать дескрипторы, имеющие среднее значение по центру и масштабируемое до единичной дисперсии до моделирования машинного обучения с использованием python и pandas
  • Python - лучший язык программирования в мире.