Проблемы с MultiIndex импортированного Excel-файла в пандах
Я импортировал лист Excel-файла и проанализировал его в панде DataFrame.
path = 'bla.xls'
x = pd.ExcelFile(path)
sheets = x.sheet_names
table = x.parse(sheets[36], header=2)
который, кажется, работает, и объект DataFrame имеет ожидаемый индекс MultiIndex:
In[180]: table.index
Out[180]: MultiIndex(levels=[[u'Gesamt', u'Studiengang Hochschulbenennung'], [u'Bekleidungstechnik', u'Betriebswirtschaft', u'Biomedical Engineering', u'Ernährungs- und Hygienetechnik', u'Facility Management', u'Kommunikations- und Softwaretechnik', u'Lebensmittel, Ernährung, Hygiene', u'Maschinenbau', u'Pharmatechnik', u'Systems Engineering', u'Textil- und Bekleidungsmanagement', u'Wirtschaftsinformatik', u'Wirtschaftsingenieurwesen', u'Wirtschaftsingenieurwesen - Produktionsmanagement insbes. Fahrzeugwirtschaft'], [u'% innerhalb von Studiengang Hochschulbenennung', u'Anzahl']],
labels=[[1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1], [1, -1, 3, -1, 6, -1, 7, -1, 5, -1, 9, -1, 0, -1, 10, -1, 8, -1, 11, -1, 2, -1, 12, -1, 13, -1, 4, -1, -1, -1], [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0]])
К сожалению, я не могу выбрать строку:
In [181]: table.ix[('Studiengang Hochschulbenennung', 'Betriebswirtschaft')]
Out[182]: KeyError: 'Key length (2) was greater than MultiIndex lexsort depth (0)'
И на самом деле:
In [182]: table.index.lexsort_depth
Out[182]: 0
в то время как
In [183]:len(table.index.levels)
Out[183]: 3
... и это бессвязно, не так ли?
Как я могу это исправить и увеличить table.index.lexsort_depth
в 3
?
Изменить: Существует связь с другим вопросом, где аналогичная проблема решена очень хорошо.
1 ответ
Решение
Вам нужно отсортировать ваш фрейм данных перед выбором строки:
table.sort(inplace=True)
table.ix[('Studiengang Hochschulbenennung', 'Betriebswirtschaft')]
После сортировки
In [21]: df.index.lexsort_depth
Out[21]: 3