Wie kann ich wirklich die `ix` - Methode ein pandas DataFrame?

Hinweis: da ich diese Frage gestellt, .ix existiert noch, aber mehr oder weniger ersetzt worden durch .loc für label-basierte Indizierung und .iloc für positions-Indizierung.


Nach dem Lesen der docs ein ix - Methode des DataFrames, Ich bin ein bisschen verwirrt durch das folgende Verhalten mit meinem MultiIndexed DataFrame (Angabe wählen Sie Spalten des index).

In [57]: metals
Out[57]: 
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 24245 entries, (u'BI', u'Arsenic, Dissolved', -2083768576.0, 1.0) 
                        to (u'WC', u'Zinc, Total',         1661183104.0, 114.0)
Data columns:
Inflow_val      20648  non-null values
Outflow_val     20590  non-null values
Inflow_qual     20648  non-null values
Outflow_qual    20590  non-null values
dtypes: float64(2), object(2)

In [58]: metals.ix['BI'].shape  # first column in the index, ok
Out[58]: (3368, 4)

In [59]: metals.ix['BI', :, :, :].shape  # first + other columns, ok
Out[59]: (3368, 4)

In [60]: metals.ix['BI', 'Arsenic, Dissolved'].shape # first two cols
Out[60]: (225, 4)

In [61]: metals.ix['BI', 'Arsenic, Dissolved', :, :].shape # first two + all others
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-62-1fb577ec32fa> in <module>()
----> 1 metals.ix['BI', 'Arsenic, Dissolved', :, :].shape                              
# traceback spaghetti snipped
KeyError: 'no item named Arsenic, Dissolved'

In [62]: metals.ix['BI', 'Arsenic, Dissolved', :, 1.0].shape # also fails

Es dauerte eine lange Zeit, um zu realisieren, dass das, was ich versucht hatte, zu erreichen mit In [61] möglich war, mit In [60]. Warum hat die ix Methode so zu Verhalten? Was ich wirklich erreichen wollte ist ein Szenario, bei In [62].

Meine Vermutung ist, dass ich die Notwendigkeit einer Neudefinition der index-Hierarchie, aber ich bin neugierig, ob es ist ein einfacher Weg.

Dank.

InformationsquelleAutor Paul H | 2012-08-21

Schreibe einen Kommentar