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?

2voto

Zain Khaishagi Punkte 135

Ich habe auch schon seit einer Stunde versucht, die Achse herauszufinden. Die Sprache in allen obigen Antworten und auch in der Dokumentation ist überhaupt nicht hilfreich.

Um die Frage zu beantworten, wie ich sie jetzt verstehe, bedeutet in Pandas axis = 1 oder 0, welche Achsenüberschriften wollen Sie konstant halten, wenn Sie die Funktion anwenden.

Hinweis: Wenn ich von Überschriften spreche, meine ich Indexnamen

Erweitern wir das Beispiel:

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------
|      X     | 0.626386| 1.52325|
+------------+---------+--------+
|      Y     | 0.626386| 1.52325|
+------------+---------+--------+

Für axis=1=Spalten: Wir halten die Spaltenüberschriften konstant und wenden die Mittelwertfunktion an, indem wir die Daten ändern. Um das zu demonstrieren, halten wir die Spaltenüberschriften konstant:

+------------+---------+--------+
|            |  A      |  B     |

Jetzt füllen wir ein Set von A- und B-Werten und finden dann den Mittelwert

|            | 0.626386| 1.52325|  

Dann füllen wir das nächste Set von A- und B-Werten und finden den Mittelwert

|            | 0.626386| 1.52325|

Ebenso, für axis=rows, halten wir die Zeilenüberschriften konstant und ändern die Daten: Um das zu demonstrieren, fixieren wir zunächst die Zeilenüberschriften:

+------------+
|      X     |
+------------+
|      Y     |
+------------+

Jetzt füllen wir das erste Set von X- und Y-Werten und finden dann den Mittelwert

+------------+---------+
|      X     | 0.626386
+------------+---------+
|      Y     | 0.626386
+------------+---------+

Dann füllen wir das nächste Set von X- und Y-Werten und finden dann den Mittelwert:

+------------+---------+
|      X     | 1.52325 |
+------------+---------+
|      Y     | 1.52325 |
+------------+---------+

Zusammenfassend,

Wenn axis=columns, fixieren Sie die Spaltenüberschriften und ändern die Daten, die von verschiedenen Zeilen stammen werden.

Wenn axis=rows, fixieren Sie die Zeilenüberschriften und ändern die Daten, die von verschiedenen Spalten stammen werden.

2voto

MonkandMonkey Punkte 619

Eigentlich müssen wir uns nicht hart daran erinnern, was axis=0, axis=1 darstellt.
Manchmal kann axis ein Tupel sein: z.B. axis=(0,1). Wie verstehen wir solche mehrdimensionalen Achsen?

Ich habe festgestellt, dass es einfacher wird, wenn wir verstehen, wie Python-Schnittstelle [:] funktioniert.

Angenommen, wir haben ein 1D-Array: a = [ 0, 1, 0 ]

a[:] # wähle alle Elemente im Array a aus

Angenommen, wir haben ein 2D-Array:

M = [[0, 0, 1],
     [1, 0, 0],
     [0, 2, 1],
     [2, 0, 2],
     [3, 1, 0]]
M[1,:] # M[0]=1, M[1]=* --> [1, 0, 0]
M[:,2] # M[0]=*, M[1]=2 --> [1, 0, 1, 2, 0]
M[:,:] # M[0]=*, M[1]=* --> alle Elemente in M werden ausgewählt

Also beim Berechnen:

np.sum(M, axis=0) # [sum(M[:,0]), sum(M[:,1]), sum(M[:,2])]
np.sum(M, axis=1) # [sum(M[0,:]), sum(M[1,:]), sum(M[2,:]), sum(M[3,:]), sum(M[4,:])]
np.sum(M, axis=-1) # -1 bedeutet letzte Dimension, es ist dasselbe wie np.sum(M, axis=1)
np.sum(M, axis=(0,1)) # sum(M[:,:])

Die Regel ist einfach, ersetze die in axis angegebenen Dimensionen durch : beim Berechnen.

2voto

RAHUL KUMAR Punkte 949

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

axis=1, es gibt die Summe zeilenweise, keepdims=True behält die 2D-Dimension bei. Ich hoffe es hilft Ihnen.

1voto

Nkrish Punkte 11

Mein Gedanke: Achse = n, mit n = 0, 1, usw. bedeutet, dass die Matrix entlang dieser Achse zusammengeklappt (gefaltet) wird. Also in einer 2D-Matrix, wenn du entlang 0 (Zeilen) zusammenklappst, arbeitest du wirklich nur mit einer Spalte auf einmal. Gleiches gilt für Matrizen höherer Ordnung.

Dies ist nicht dasselbe wie die normale Bezeichnung eines Elements in einer Matrix, wobei 0 -> Zeile und 1 -> Spalte. Gleiches gilt für andere Dimensionen in einem N-dimensionales Array.

1voto

lqu Punkte 606

Ich werde explizit darauf verzichten, 'zeilenweise' oder 'entlang der Spalten' zu verwenden, da die Leute sie möglicherweise genau falsch interpretieren.

Zuerst die Analogie. Intuitiv würde man erwarten, dass pandas.DataFrame.drop(axis='column') eine Spalte aus N Spalten entfernt und dir (N - 1) Spalten gibt. Du kannst also JETZT keine Aufmerksamkeit auf Zeilen richten (und das Wort 'Zeile' aus deinem Englischwörterbuch entfernen.) Umgekehrt funktioniert drop(axis='row') auf Zeilen.

Genau so funktioniert sum(axis='column') auf mehreren Spalten und gibt dir 1 Spalte. Ebenso führt sum(axis='row') zu 1 Reihe. Dies entspricht ihrer einfachsten Definition, eine Liste von Zahlen auf eine einzelne Zahl zu reduzieren.

Allgemein gesprochen, mit axis=column siehst du Spalten, arbeitest mit Spalten und erhältst Spalten. Vergiss Zeilen.

Mit axis=row ändere die Perspektive und arbeite an den Zeilen.

0 und 1 sind nur Aliasnamen für 'row' und 'column'. Es ist die Konvention der Matrixindizierung.

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