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?

32voto

Michael Punkte 12815

Der einfachste Weg für mich zu verstehen ist, darüber zu sprechen, ob Sie eine Statistik für jede Spalte berechnen (axis = 0) oder für jede Zeile (axis = 1). Wenn Sie eine Statistik, sagen wir einen Mittelwert, mit axis = 0 berechnen, erhalten Sie diese Statistik für jede Spalte. Wenn also jede Beobachtung eine Zeile ist und jede Variable in einer Spalte steht, erhalten Sie den Mittelwert jeder Variable. Wenn Sie axis = 1 setzen, berechnen Sie Ihre Statistik für jede Zeile. In unserem Beispiel würden Sie den Mittelwert für jede Beobachtung über alle Variablen erhalten (vielleicht möchten Sie den Durchschnitt der verwandten Messungen).

axis = 0: nach Spalte = spaltenweise = entlang der Zeilen

axis = 1: nach Zeile = zeilenweise = entlang der Spalten

16voto

Mark09 Punkte 263

Achse im Hinblick auf die Programmierung ist die Position im Form-Tupel. Hier ist ein Beispiel:

import numpy as np

a=np.arange(120).reshape(2,3,4,5)

a.shape
Out[3]: (2, 3, 4, 5)

np.sum(a,axis=0).shape
Out[4]: (3, 4, 5)

np.sum(a,axis=1).shape
Out[5]: (2, 4, 5)

np.sum(a,axis=2).shape
Out[6]: (2, 3, 5)

np.sum(a,axis=3).shape
Out[7]: (2, 3, 4)

Der Mittelwert auf der Achse führt dazu, dass die Dimension entfernt wird.

Bezugnehmend auf die ursprüngliche Frage, ist die Form von dff (1,2). Die Verwendung von axis=1 wird die Form in (1,) ändern.

15voto

nos Punkte 18092

Der Designer von Pandas, Wes McKinney, hat früher intensiv mit Finanzdaten gearbeitet. Denke an Spalten als Aktiennamen und Index als tägliche Preise. Du kannst dann erraten, was das Standardverhalten ist (d. h. axis=0) in Bezug auf diese Finanzdaten. axis=1 kann einfach als 'die andere Richtung' betrachtet werden.

Zum Beispiel die Statistikfunktionen wie mean(), sum(), describe(), count() sind alle standardmäßig spaltenweise, weil es mehr Sinn macht, sie für jede Aktie durchzuführen. sort_index(by=) erfolgt ebenfalls standardmäßig spaltenweise. fillna(method='ffill') füllt entlang der Spalte, weil es die gleiche Aktie ist. dropna() erfolgt standardmäßig zeilenweise, weil du wahrscheinlich nur den Preis an diesem Tag verwerfen möchtest, anstatt alle Preise dieser Aktie wegzuwerfen.

Ebenso bezieht sich das eckige Klammern-Indexing auf die Spalten, da es häufiger ist, eine Aktie auszuwählen als einen Tag.

14voto

MarianD Punkte 11029

Das Problem bei der ordnungsgemäßen Verwendung von axis= liegt in der Verwendung für 2 Hauptfälle:

  1. Zur Berechnung eines akkumulierten Werts oder zum Umsortieren (z.B. Sortieren) von Daten.
  2. Zum Manipulieren ("Spielen" mit) von Entitäten (z.B. Dataframes).

Die Hauptidee hinter dieser Antwort ist, dass zur Vermeidung von Verwirrung entweder eine Zahl oder ein Name ausgewählt wird, um die bestimmte Achse zu spezifizieren, je nachdem, was klarer, intuitiver und beschreibender ist.

Pandas basiert auf NumPy, das auf Mathematik, insbesondere auf n-dimensionalen Matrizen, basiert. Hier ist ein Bild für die gängige Verwendung von Achsnamen in der Mathematik im 3-dimensionalen Raum:

Geben Sie hier die Bildbeschreibung ein Dieses Bild dient nur zum Einprägen der ordinalen Zahlen der Achsen:

  • 0 für die x-Achse,
  • 1 für die y-Achse und
  • 2 für die z-Achse.

Die z-Achse ist nur für Paneele gedacht; für Dataframes beschränken wir unser Interesse auf die grün gefärbte, 2-dimensionale Basisebene mit x-Achse (0, vertikal) und y-Achse (1, horizontal).

Geben Sie hier die Bildbeschreibung ein Alles dreht sich um Zahlen als potenzielle Werte des axis=-Parameters.

Die Namen der Achsen lauten 'index' (Sie können das Alias 'rows' verwenden) und 'columns', und für diese Erklärung ist die Beziehung zwischen diesen Namen und ordinalen Zahlen (der Achsen) NICHT wichtig (da jeder weiß, was die Wörter "Reihen" und "Spalten" bedeuten und jeder hier — nehme ich an — weiß, was das Wort "Index" in Pandas bedeutet).

Und jetzt, meine Empfehlung:

  1. Wenn Sie einen akkumulierten Wert berechnen möchten, können Sie ihn aus den Werten berechnen, die entlang von Achse 0 (oder entlang von Achse 1) liegen — verwenden Sie axis=0 (oder axis=1).

    Ebenso, wenn Sie Werte umsortieren möchten, verwenden Sie die Achsennummer entlang derer sich die Daten zum Umsortieren befinden (z.B. zum Sortieren).

  2. Wenn Sie Entitäten manipulieren möchten (z.B. konkatenieren) (Dataframes) — verwenden Sie axis='index' (Synonym: axis='rows') oder axis='columns', um die resultierende Änderung zu spezifizieren — Index (Reihen) oder Spalten, entsprechend.
    (Für das Konkatenieren erhalten Sie entweder einen längeren Index (= mehr Reihen) oder mehr Spalten).

12voto

learnToCode Punkte 381

Ich war auch verwirrt darüber, aber so erinnere ich mich daran.

Es gibt die Dimension des Dataframes an, die sich ändern würde oder auf die die Operation angewendet wird.

Verstehen wir das anhand eines Beispiels. Wir haben einen Dataframe df mit der Form (5, 10), was bedeutet, dass er 5 Zeilen und 10 Spalten hat.

Wenn wir jetzt df.mean(axis=1) machen, bedeutet dies, dass Dimension 1 geändert wird, was impliziert, dass er immer noch die gleiche Anzahl von Zeilen hat, aber eine andere Anzahl von Spalten. Daher wäre das Ergebnis der Form (5, 1).

Ähnlich, wenn wir df.mean(axis=0) machen, bedeutet dies, dass Dimension 0 geändert wird, was bedeutet, dass die Anzahl von Zeilen geändert wird, aber die Anzahl von Spalten gleich bleibt, daher wäre das Ergebnis der Form (1, 10).

Versuche, dies mit den Beispielen aus der Frage in Verbindung zu bringen.

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