Pandas, Excel-Import und MultiIndex

Ich bin neu in Pandas und versuche derzeit, einige Analysen von Excel-Daten im folgenden Schema zu machen:

Bildbeschreibung hier eingeben

Mein Ziel ist eine Visualisierung mit den Index-Labels XYZ , CDE , EFG , HU auf der x-Achse und den entsprechenden Perc Werten von Yes , ProbYes , X , ProbNo , No gestapelt auf der y-Achse.

Zurzeit analysiere ich die Excel-Daten in einen Panda DataFrame über den Code:

 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 

Der generierte MultiIndex der table scheint gut zu sein:

 >>> 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]]) 

Es ist jedoch nicht möglich, auf eine bestimmte Zeile zuzugreifen:

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

… noch ist es möglich, eine Spalte mit den Zeilenindizes zuzugreifen oder zu filtern / zu entfernen

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

Dh die indizes haben keine namen und ich vermute, ich kann nicht auf sie zugreifen

Ich habe versucht, die Datenstruktur über die alternative Parse zu vereinfachen:

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

Das hat aber nicht wirklich geholfen

Bearbeiten :

Es hilft, zu sort :

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

Ergibt:

Bildbeschreibung hier eingeben

Und mit diesem Tisch kann ich meine Analyse nicht machen …

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

Ich denke nach dem Tun

 table.sort(inplace=True) 

Sie können in der Lage sein zuzugreifen

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

BEARBEITEN:

Ich weiß warum – Ihre Excel-Datei hat Zellen wie A4:A11 . Wenn Sie es in pandas DataFrame laden, ist der Index Individual nur in A4 während Indizes in A5:A11 alle nan

Eine Arbeit, die ich mir vorstellen kann, ist:

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

Dann sind Sie gut zu gehen:

 table.ix[('Individual','CDE')] 
  • Fügen Sie eine Zeile mit Mitteln der Spalten zu pandas DataFrame hinzu
  • Löschen von Zeilen der Sommerzeit aus einem zeitindizierten Pandas-Dataframe
  • Erstellen Sie einen Bigram aus einer Spalte in Pandas df
  • In Python-Pandas starten Sie den Zeilenindex von 1 anstelle von Null, ohne zusätzliche Spalte zu erstellen
  • Python Pandas MemoryError
  • Wie lösche man eine nicht-numerische Spalte aus einem Eingabedatensatz?
  • Wie man den Wert in den ersten N Rows von der Gruppe in einem Multi-Index Pandas Dataframe aktualisiert?
  • Pandas Resampling error: Nur gültig mit DatetimeIndex oder PeriodIndex
  • Plotten von Pandas GroupBy
  • HDFStore.append (string, DataFrame) schlägt fehl, wenn String-Spalteninhalte länger sind als die bereits vorhandenen
  • Beschleunigung der sequentiellen Überprüfung, wenn ein Punkt in einer Form in Python ist
  • Python ist die beste Programmiersprache der Welt.