Warum gibt die Verwendung von "==" in Pandas eine Serie anstelle von "bool" zurück?

8

Ich kann einfach nicht herausfinden, was "==" in der zweiten Zeile bedeutet:
- Es ist kein Test, es gibt keine if-Anweisung ...
- Es ist keine Variablendeklaration ...

Ich habe das noch nie gesehen, die Sache data.ctage==catist eine Pandas-Serie und kein Test ...

for cat in data["categ"].unique():
    subset = data[data.categ == cat] # Création du sous-échantillon
    print("-"*20)
    print('Catégorie : ' + cat)
    print("moyenne:\n",subset['montant'].mean())
    print("mediane:\n",subset['montant'].median())
    print("mode:\n",subset['montant'].mode())
    print("VAR:\n",subset['montant'].var())
    print("EC:\n",subset['montant'].std())
    plt.figure(figsize=(5,5))
    subset["montant"].hist(bins=30) # Crée l'histogramme
    plt.show() # Affiche l'histogramme
Amaumox
quelle
1
Vielleicht führen sie einen elementweisen Vergleich zweier Numpy-Arrays durch und verwenden das resultierende boolesche Array als Selektor für Daten? stackoverflow.com/questions/10580676/… Pandas ist komisch.
Neil
1
Es ist eine Maske wie positive_X = X[X > 0]von Numpy.
Guimoute

Antworten:

10

Es testet jedes Element data.categauf Gleichheit mit cat. Dies erzeugt einen Vektor von Wahr / Falsch-Werten. Dies wird wie im Indexer an übergeben data[], wodurch die Zeilen zurückgegeben werden data, die den True-Werten im Vektor entsprechen.

Zusammenfassend gibt der gesamte Ausdruck die Teilmenge der Zeilen zurück, von datadenen der Wert von data.categgleich ist cat.

(Scheint möglich, dass die gesamte Operation eleganter durchgeführt werden könnte data.groupBy('categ').apply(someFunc).)

Dave Costa
quelle
2

Es wird eine boolesche Reihe mit Indizes erstellt, bei denen data.categgleich catist. Mit dieser booleschen Maske können Sie Ihren Datenrahmen filtern. Mit anderen Worten subset, alle Datensätze enthalten, in denen categder Wert gespeichert ist cat.

Dies ist ein Beispiel mit numerischen Daten

np.random.seed(0)
a = np.random.choice(np.arange(2), 5)
b = np.random.choice(np.arange(2), 5)
df = pd.DataFrame(dict(a = a, b = b))


df[df.a == 0].head()

#   a   b
# 0 0   0
# 2 0   0
# 4 0   1

df[df.a == df.b].head()

#   a   b
# 0 0   0
# 2 0   0
# 3 1   1
jcaliz
quelle
2

Ja, es ist ein Test. Boolesche Ausdrücke sind nicht auf ifAnweisungen beschränkt.

Es sieht aus, als wäre dataes ein Datenrahmen (PANDAS). Der als Datenrahmenindex verwendete Ausdruck gibt an, wie PANDAS einen Selektor oder Filter bezeichnet. Dies bedeutet, dass jede Zeile ausgewählt werden soll, in der das Feld categmit der Variablen übereinstimmt cat(anscheinend eine vordefinierte Variable). Diese Sammlung von Zeilen wird zu einem neuen Datenrahmen subset.

Pflaume
quelle
2

data.categ == catgibt eine boolesche Liste zurück, die zum Filtern Ihres Datenrahmens verwendet wird, indem nur Werte übrig bleiben, bei denen der boolesche Wert gleich ist True.

Boolesche Werte werden in vielen Situationen verwendet, nicht nur in ifAnweisungen.

Henrique Branco
quelle
2

Hier überprüfen Sie data.categmit dem iterierenden Element catim Wörterbuch von data.
Und wenn sie gleich sind, setzen Sie die Schleife fort.

Harshit Ruwali
quelle