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?

535voto

zhangxaochen Punkte 21121

Es gibt die Achse entlang der, welche die Mittelwerte berechnet werden. Standardmäßig ist axis=0. Dies ist konsistent mit der Verwendung von numpy.mean, wenn axis explizit angegeben wird (in numpy.mean, ist standardmäßig axis==None, was den Mittelwert über das flache Array berechnet), wobei axis=0 entlang der Zeilen (nämlich, Index in pandas) und axis=1 entlang der Spalten. Für mehr Klarheit kann man wählen, axis='index' (statt axis=0) oder axis='columns' (statt axis=1) anzugeben.

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------+---------
|      0     | 0.626386| 1.52325|----axis=1----->
+------------+---------+--------+
             |         |
             | axis=0  |

202voto

Ken Wallace Punkte 2281

Diese Antworten helfen zwar, das zu erklären, aber es ist immer noch nicht ganz intuitiv für einen Nicht-Programmierer (z.B. jemanden wie mich, der Python zum ersten Mal im Kontext eines Datenwissenschaftskurses lernt). Ich finde es immer noch verwirrend, die Begriffe "entlang" oder "für jedes" in Bezug auf Zeilen und Spalten zu verwenden.

Was für mich sinnvoller ist, ist es so auszudrücken:

  • Achse 0 wirkt auf alle ZEILEN in jeder SPALTE
  • Achse 1 wirkt auf alle SPALTEN in jeder ZEILE

Also wird ein Mittelwert auf Achse 0 der Mittelwert aller Zeilen in jeder Spalte sein, und ein Mittelwert auf Achse 1 wird ein Mittelwert aller Spalten in jeder Zeile sein.

Letztendlich sagt dies dasselbe aus wie @zhangxaochen und @Michael, aber auf eine Art und Weise, die für mich leichter zu verinnerlichen ist.

132voto

Anu Punkte 2686

Lass uns visualisieren (du wirst es immer behalten), Gib hier eine Bildbeschreibung ein

In Pandas:

  1. axis=0 bedeutet entlang der "Indizes". Es ist eine Zeilenoperation.

Annehmen, um die concat()-Operation auf dataframe1 & dataframe2 durchzuführen, nehmen wir dataframe1 & nehmen die erste Zeile aus dataframe1 heraus und platzieren sie in das neue DF, dann nehmen wir eine weitere Zeile aus dataframe1 und setzen sie in das neue DF, wir wiederholen diesen Vorgang, bis wir zum Ende von dataframe1 gelangen. Dann machen wir den gleichen Vorgang für dataframe2.

Im Grunde genommen stapeln wir dataframe2 oben auf dataframe1 oder umgekehrt.

Zum Beispiel das Stapeln von Büchern auf einem Tisch oder dem Boden

  1. axis=1 bedeutet entlang der "Spalten". Es ist eine spaltenweise Operation.

Annehmen, um die concat()-Operation auf dataframe1 & dataframe2 durchzuführen, holen wir die erste komplette Spalte (auch 1. Serie genannt) aus dataframe1 und platzieren sie in ein neues DF, dann nehmen wir die zweite Spalte aus dataframe1 und stellen sie (seitlich) daneben, wir müssen diesen Vorgang wiederholen, bis alle Spalten abgeschlossen sind. Dann wiederholen wir den gleichen Vorgang für dataframe2. Im Grunde genommen, stacken wir dataframe2 seitwärts.

Beispiel: Das Anordnen von Büchern in einem Bücherregal.

Darüber hinaus sind Arrays bessere Darstellungen zur Darstellung einer verschachtelten n-dimensionalen Struktur im Vergleich zu Matrizen! Also kann unten Ihnen mehr helfen, wie die Achse eine wichtige Rolle spielt, wenn Sie auf mehr als eine Dimension verallgemeinern. Außerdem können Sie tatsächlich ein n-dimensionales Array drucken/schreiben/zeichnen/visualisieren, jedoch ist es unmöglich, dieselbe Darstellung in einer Matrixdarstellung (3D) auf einem Papier mit mehr als 3 Dimensionen zu schreiben oder zu visualisieren.

Gib hier eine Bildbeschreibung ein

44voto

Safak Ozkan Punkte 441

axis bezieht sich auf die Dimension des Arrays, im Falle von pd.DataFrames ist axis=0 die Dimension, die nach unten zeigt, und axis=1 diejenige, die nach rechts zeigt.

Beispiel: Stellen Sie sich ein ndarray mit der Form (3,5,7) vor.

a = np.ones((3,5,7))

a ist ein 3-dimensionales ndarray, d.h. es hat 3 Achsen ("Achsen" ist der Plural von "Axis"). Die Konfiguration von a wird aussehen wie 3 Scheiben Brot, wobei jede Scheibe eine Dimension von 5 mal 7 hat. a[0,:,:] bezieht sich auf die 0-te Scheibe, a[1,:,:] bezieht sich auf die 1-te Scheibe usw.

a.sum(axis=0) wird sum() entlang der 0-ten Achse von a anwenden. Du wirst alle Scheiben addieren und am Ende mit einer Scheibe der Form (5,7) enden.

a.sum(axis=0) ist äquivalent zu

b = np.zeros((5,7))
for i in range(5):
    for j in range(7):
        b[i,j] += a[:,i,j].sum()

b und a.sum(axis=0) werden beide so aussehen

array([[ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.]])

In einem pd.DataFrame funktionieren Achsen genauso wie in numpy.arrays: axis=0 wendet sum() oder eine andere Reduktionsfunktion auf jede Spalte an.

Anm. In @zhangxaochens Antwort finde ich die Phrasen "entlang der Zeilen" und "entlang der Spalten" etwas verwirrend. axis=0 sollte sich auf "entlang jeder Spalte" beziehen, und axis=1 "entlang jeder Zeile".

33voto

Sumit Pokhrel Punkte 1667

Schauen wir uns die Tabelle von Wiki an. Dies ist eine Schätzung des BIP des IWF von 2010 bis 2019 für die zehn Länder. hier Bildbeschreibung eingeben

1. Die Achse 1 wirkt für jede Zeile auf alle Spalten
Wenn Sie den Durchschnitt (Mittelwert) des BIP FÜR JEDEN Staat über das Jahrzehnt (2010-2019) berechnen möchten, müssen Sie df.mean(axis=1) verwenden. Zum Beispiel, wenn Sie den durchschnittlichen BIP der Vereinigten Staaten von 2010 bis 2019 berechnen möchten, df.loc['Vereinigte Staaten','2010':'2019'].mean(axis=1)

2. Die Achse 0 wirkt für jede Spalte auf alle Zeilen
Wenn ich den Durchschnitt (Mittelwert) des BIP FÜR JEDEN Jahr für alle Länder berechnen möchte, müssen Sie df.mean(axis=0) verwenden. Zum Beispiel, wenn Sie den durchschnittlichen BIP des Jahres 2015 für die Vereinigten Staaten, China, Japan, Deutschland und Indien berechnen möchten, df.loc['Vereinigte Staaten':'Indien','2015'].mean(axis=0)

Hinweis: Der obige Code funktioniert nur, nachdem die Spalte "Land (oder abhängiges Gebiet)" als Index festgelegt wurde, unter Verwendung der set_index Methode.

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