Es ist eine nützliche ".ix", wenn Sie Pandas DataFrames durchsuchen, aber wenn Sie es nicht verstehen, geraten Sie in eine Falle.
Angenommen, Sie haben den folgenden DataFrame.
from pandas import DataFrame
df = DataFrame(
[['a0', 'b0'], ['a1', 'b1'], ['a2', 'b2']],
index=[2, 4, 6],
columns=['a', 'b'])
a | b | |
---|---|---|
2 | a0 | b0 |
4 | a1 | b1 |
6 | a2 | b2 |
Was ist, wenn Sie hier auf die "a-Spalte" der "zweiten Zeile" (ab 0) verweisen möchten? Das erwartete Ergebnis ist "a2".
.ix
akzeptiert sowohl die Reihenfolge als auch den Index. Wenn Sie sich also wie folgt darauf beziehen ...
df.ix[2, 'a']
Das Ergebnis ist "a0". Dies liegt daran, dass die Referenz, die mit einer Zahl in ".ix" angegeben ist, zum Index geht, wenn der Index vorhanden ist, und die Reihenfolge anzeigt, wenn sie nicht im Index vorhanden ist.
Diese Mehrdeutigkeit in der ".ix" -Referenz scheint in der Pandas-Version 0.20 veraltet zu sein.
Es ist vielleicht nicht die beste Lösung, aber ich werde versuchen, mit ".iloc" darauf zu verweisen. Da dies jedoch nur in der Reihenfolge referenziert werden kann, verwenden Sie pandas.Index.get_loc zusammen. Dies ist eine Methode, die nach Zeilennamen (oder Spaltennamen) sucht und die Reihenfolge zurückgibt.
df.iloc[2, df.columns.get_loc('a')]
Das erwartete Ergebnis "a2" wird jetzt zurückgegeben.
Im obigen Beispiel wird der Spaltenname angegeben. Wenn Sie jedoch den Zeilennamen angeben, gehen Sie wie folgt vor.
df.iloc[df.index.get_loc(6), 0]
Wenn Sie die Zeilen- und Spaltennamen im Voraus kennen, können Sie normalerweise ".loc" verwenden.
df.loc[6, 'a']
Ebenso ist .iloc
in Ordnung, wenn Sie die Zeilen- und Spaltenreihenfolge im Voraus kennen.
df.iloc[2, 0]
Wenn Sie das Verhalten von .ix
nicht verstehen, wird es sich unbeabsichtigt verhalten.
Selbst wenn Sie das Verhalten verstehen, müssen Sie den Inhalt des Index kennen, daher ist es besser, die Verwendung von ".ix" so weit wie möglich zu vermeiden.
Recommended Posts