414 Stimmen

Was bedeutet Achse in Pandas?

Hier ist mein Code zum Generieren eines DataFrames:

import pandas as pd
import numpy as np

dff = pd.DataFrame(np.random.randn(1,2),columns=list('AB'))

dann habe ich das DataFrame erhalten:

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------+---------
|      0     | 0.626386| 1.52325|
+------------+---------+--------+

Wenn ich den Befehl eingebe :

dff.mean(axis=1)

Ich erhielt :

0    1.074821
dtype: float64

Laut der Referenz von Pandas steht axis=1 für Spalten und ich erwarte, dass das Ergebnis des Befehls wie folgt aussieht:

A    0.626386
B    1.523255
dtype: float64

Also hier ist meine Frage: Was bedeutet axis in Pandas?

0voto

Travis Punkte 1122

Ich denke, es gibt eine andere Möglichkeit, es zu verstehen.

Für ein np.array, wenn wir Spalten eliminieren möchten, verwenden wir axis = 1; wenn wir Zeilen eliminieren möchten, verwenden wir axis = 0.

np.mean(np.array(np.ones(shape=(3,5,10))),axis = 0).shape # (5,10)
np.mean(np.array(np.ones(shape=(3,5,10))),axis = 1).shape # (3,10)
np.mean(np.array(np.ones(shape=(3,5,10))),axis = (0,1)).shape # (10,)

Für ein pandas-Objekt steht axis = 0 für eine zeilenweise Operation und axis = 1 für eine spaltenweise Operation. Dies unterscheidet sich von numpy nach Definition, wir können Definitionen unter numpy.doc und pandas.doc überprüfen

0voto

silicon23 Punkte 68

Unter Verwendung des Beispiels von @jerry_sjtu:

    +------------+---------+--------+
    |            |  A      |  B     |
    +------------+---------
    |      0     | 0.626386| 1.52325|
    +------------+---------+--------+

Die Pandas-Dokumentation löst wahrscheinlich die Hälfte des Problems wie folgt (es führt den Mittelwert der Zeilen für jede Spalte aus):

Achse{0 oder 'index', 1 oder 'columns'}, standardmäßig 0
    Achse, auf der die Funktion angewendet wird:
        0 oder 'index': wenden Sie die Funktion auf jede Spalte an.
        1 oder 'columns': wenden Sie die Funktion auf jede Zeile an.

dff.mean(axis='index') ergibt die erwartete Antwort (es führt den Mittelwert der Werte entlang der Zeile aus - es gibt nur eine Zeile, daher entspricht der Mittelwert den Zeilenwerten). Bemerkenswerterweise gibt Pandas auch das Spaltenlabel an und reduziert damit die Mehrdeutigkeit:

A    0.626386
B    1.523255
dtype: float64

Andererseits ergibt dff.mean(axis='column') (es führt den Mittelwert der Werte entlang der Spalten aus - es gibt zwei Spalten, daher wird der Mittelwert berechnet: 0.62.. + 1.75.. = /2 => 1.07..). Bemerkenswerterweise gibt Pandas auch das Indexlabel, also "0", an und reduziert damit die Mehrdeutigkeit:

0    1.074821
dtype: float64

Fazit: Vielleicht würde es weniger verwirrend sein, wenn man statt '1' 'column', 'column' verwendet - und es formuliert als ...Werte entlang des angegebenen Labels, z.B. Spalten! Ein anderer Ansatz ist das Konsultieren der Handbuchseiten. Man kann die Operation validieren, indem man die Ergebnisse überprüft, bei denen Spalten- oder Indexnamen vorhanden sind.

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html

-10voto

Patrick Punkte 7

Arrays sind so konzipiert, dass sie eine sogenannte Achse=0 und Zeilen vertikal versus Achse=1 und Spalten horizontal positioniert sind. Achse bezieht sich auf die Dimension des Arrays. Illustration

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X