2016-05-18 6 views
3

Was ist der beste Weg, um hochdimensionale Daten in Python zu speichern und zu analysieren? Ich mag Pandas DataFrame und Panel, wo ich die Achse leicht manipulieren kann. Jetzt habe ich einen Hyperwürfel (dim> = 4) von Daten. Ich habe an Sachen wie dict of Panels, Tuple als Paneleinträge gedacht. Ich frage mich, ob es in Python ein sehr dunkles Panel-Ding gibt.Hochdimensionale Datenstruktur in Python

update 20/05/16: Vielen Dank für alle Antworten. Ich habe versucht, MultiIndex und XArray, aber ich bin nicht in der Lage, einen von ihnen zu kommentieren. In meinem Problem werde ich stattdessen versuchen, ndarray zu verwenden, da ich fand, dass das Etikett nicht wesentlich ist, und ich es getrennt speichern kann.

update 16/09/16: Ich kam am Ende MultiIndex zu verwenden. Die Art, es zu manipulieren, ist anfangs ziemlich schwierig, aber ich gewöhn mich jetzt daran.

+0

'np.darray' ist ein zugrunde liegender Typ für Pandas DataFrame, aber es unterstützt mehr als zwei Dimensionen: http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.darray. html –

+0

Da Pandas MultiIndexing stark verbessert hat, wird dies generell anstelle von Panels favorisiert. – Alexander

Antwort

4

MultiIndex ist am nützlichsten für höherdimensionale Daten wie erläutert in the docs und this SO answer, weil es Ihnen ermöglicht, mit einer beliebigen Anzahl von Dimension in einer DataFrame Umgebung zu arbeiten.

Zusätzlich zu der Panel gibt es auch Panel4D - derzeit in der experimentellen Phase. Angesichts der Vorteile von MultiIndex würde ich nicht empfehlen, entweder diese oder die dreidimensionale Version zu verwenden. Ich glaube nicht, dass diese Datenstrukturen im Vergleich dazu viel an Zugkraft gewonnen haben und in der Tat auslaufen werden.

+0

Panels und multidimensionale Panels werden in zukünftigen Versionen zugunsten von 'xarray' veraltet: http://pandas.pydata.org/pandas-docs/version/0.18.0/whatsnew.html#to-xarray – aldanor

3

Wenn Sie benannte Arrays und pandasähnliche Smart Indizierung benötigen, können Sie das Paket xarray verwenden, das im Wesentlichen eine n-dimensionale Erweiterung des Pandas-Panels ist (Panels werden in Zukunft zugunsten von xarray in Pandas veraltet).

Andernfalls kann es manchmal sinnvoll sein, einfache numpy Arrays zu verwenden, die von beliebiger Dimension sein können; Sie können auch beliebig numpige Record-Arrays beliebiger Dimension haben.

1

Ich empfehle, weiterhin DataFrame zu verwenden, aber verwenden Sie die MultiIndex Funktion. DataFrame ist besser unterstützt und Sie behalten alle Ihre Dimensionalität mit der MultiIndex.

Beispiel

df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'], index=['A', 'B']) 

df3 = pd.concat([df for _ in [0, 1]], keys=['one', 'two']) 

df4 = pd.concat([df3 for _ in [0, 1]], axis=1, keys=['One', 'Two']) 

print df4 

Sieht aus wie:

 One Two 
     a b a b 
one A 1 2 1 2 
    B 3 4 3 4 
two A 1 2 1 2 
    B 3 4 3 4 

Dies ist ein Hyper-Würfel von Daten ist. Und Sie werden mit Support und Fragen und weniger Bugs und vielen anderen Vorteilen viel besser bedient.