
Dieser Artikel kann, wie Elemente gezählt werden, die bestimmten Bedingungen in pandas.DataFrame und pandas.Series erfüllen.
- Wie Elemente gezählt werden, sterben sterben Bedingung erfüllen
- UND, ODER, NICHT für mehrere Bedingungen
- Zählen nach Bedingungen für Zahlen
- Zählen Sie nach Bedingungen für Buchstaben
- Zählen Sie NaN und Nicht-NaN
Im following Artikel erfahren Sie, wie SIE Zeilen extrahieren, die sterben Bedingungen erfüllen.
Verwenden Sie die folgende CSV-Datei als Beispiel.
import pandas as pd
print(pd.__version__)
# 1.4.1
df = pd.read_csv('data/src/sample_pandas_normal.csv')
print(df)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
Wie Elemente gezählt werden, sterben sterben Bedingung erfüllen
Das Verfahren zum Zählen von Elementen, sterben bestimmte Bedingungen erfüllen, ist wie folgt:
- Rufen Sie pandas.DataFrame und pandas.Series vom Typ bool ab
- Zählen Sie True mit der Methode sum()
- pandas.DataFrame
- Anzahl pro Spalte:
sum()
- Anzahl pro Reihe:
sum(axis=1)
- Zählen Sie die Summe:
sum().sum() or values.sum()
- Anzahl pro Spalte:
- pandas.Serie
- pandas.DataFrame
pandas.DataFrame
Durch Anwenden des Vergleichsoperators auf pandas.DataFrame und pandas.Series wird jedes Element erfasst, und pandas.DataFrame und pandas.Series vom boolschen Typ (True, False) derselben Größe werden zurückgegeben.
Die Klammern () auf der rechten Seite können weggelassen werden.
df_bool = (df == 'CA')
print(df_bool)
# name age state point
# 0 False False False False
# 1 False False True False
# 2 False False True False
# 3 False False False False
# 4 False False True False
# 5 False False False False
Da True in Python als 1 und False als 0 betrachtet WIRD, can SIE sterben Anzahl der Elemente, sterben sterben Bedingung erfüllen, mit der Methode sum() ermitteln.
Standardmäßig WIRD pro Spalte gezählt, und bei Achse = 1 pro Zeile.
print(df_bool.sum())
# name 0
# age 0
# state 3
# point 0
# dtype: int64
print(df_bool.sum(axis=1))
# 0 0
# 1 1
# 2 1
# 3 0
# 4 1
# 5 0
# dtype: int64
sum() von pandas.DataFrame gibt pandas.Series zurück. Sie können die Gesamtzahl erhalten, indem Sie sum() von pandas.Series aufrufen.
print(df_bool.sum().sum())
# 3
Sie können pandas.DataFrame in das NumPy-Array numpy.ndarray mit dem Attributwerte konvertieren.
Die Methode sum() von numpy.ndarray berechnet automatisch die Gesamtzahl. Daher können Sie die Gesamtzahl der Elemente erhalten, die Bedingung erfüllen, dafür sum() aus dem Attributwerte (numpy.ndarray) aufrufen.
print(df_bool.values)
# [[False False False False]
# [False False True False]
# [False False True False]
# [False False False False]
# [False False True False]
# [False False False False]]
print(type(df_bool.values))
# <class 'numpy.ndarray'>
print(df_bool.values.sum())
# 3
Sie können wie folgt schreiben:
print((df == 'CA').sum())
# name 0
# age 0
# state 3
# point 0
# dtype: int64
print((df == 'CA').sum(axis=1))
# 0 0
# 1 1
# 2 1
# 3 0
# 4 1
# 5 0
# dtype: int64
print((df == 'CA').sum().sum())
# 3
print((df == 'CA').values.sum())
# 3
pandas.Serie
Verwenden Sie die folgenden pandas.Series.
s = df['age']
print(s)
# 0 24
# 1 42
# 2 18
# 3 68
# 4 24
# 5 30
# Name: age, dtype: int64
Die Vorgehensweise ist die gleiche wie bei pandas.DataFrame. Reihen sind eindimensionale Daten, daher gibt die Methode sum() die Gesamtzahl zurück.
s_bool = (s < 25)
print(s_bool)
# 0 True
# 1 False
# 2 True
# 3 False
# 4 True
# 5 False
# Name: age, dtype: bool
print(s_bool.sum())
# 3
print((s < 25).sum())
# 3
If SIE Elemente umfassen möchten, sterben sterben Bedingung für Eine beliebige Zeile Oder Spalte erfüllen, can SIE dasselbe tun, Dem SIE sterben Zeile Oder Spalte mit [], loc[] or iloc[] angeben.
UND, ODER, NICHT für mehrere Bedingungen
Um mehrere Bedingungen zu kombinieren, schließen Sie jeden Bedingungsausdruck in Klammern () ein und verwenden Sie sterben following Operatoren.
df_bool_or = ((df == 'CA') | (df == 70))
print(df_bool_or)
# name age state point
# 0 False False False False
# 1 False False True False
# 2 False False True True
# 3 False False False True
# 4 False False True False
# 5 False False False False
print(df_bool_or.sum())
# name 0
# age 0
# state 3
# point 2
# dtype: int64
print(df_bool_or.sum(axis=1))
# 0 0
# 1 1
# 2 2
# 3 1
# 4 1
# 5 0
# dtype: int64
print(df_bool_or.values.sum())
# 5
df_bool_not = ~(df == 'CA')
print(df_bool_not)
# name age state point
# 0 True True True True
# 1 True True False True
# 2 True True False True
# 3 True True True True
# 4 True True False True
# 5 True True True True
print(df_bool_not.sum())
# name 6
# age 6
# state 3
# point 6
# dtype: int64
print(df_bool_not.sum(axis=1))
# 0 4
# 1 3
# 2 3
# 3 4
# 4 3
# 5 4
# dtype: int64
print(df_bool_not.values.sum())
# 21
s_bool_and = ((df['state'] == 'CA') & (df['age'] < 30))
print(s_bool_and)
# 0 False
# 1 False
# 2 True
# 3 False
# 4 True
# 5 False
# dtype: bool
print(s_bool_and.sum())
# 2
Beachten Sie, dass die Verwendung von und oder oder anstelle von & oder | oder das Weglassen von Klammern führt zu einem Fehler.
Zählen nach Bedingungen für Zahlen
Bedingungen können Sie mit den Vergleichsoperatoren <, <=, >, >=, ==, != für Zahlen angeben.
df_num = df[['age', 'point']]
print(df_num)
# age point
# 0 24 64
# 1 42 92
# 2 18 70
# 3 68 70
# 4 24 88
# 5 30 57
print((df_num <= 70).sum())
# age 6
# point 4
# dtype: int64
print(((df['age'] > 20) & (df['age'] < 40)).sum())
# 3
print((df_num % 2 == 1).sum())
# age 0
# point 1
# dtype: int64
Beachten Sie, dass der Vergleich von pandas.DataFrame, der Zeichenfolgenspalten enthält, mit einem numerischen Wert unter Verwendung von < oder > einen Fehler auslöst. Wenn Sie nur numerische Spalten extrahieren möchten, verwenden Sie select_dtypes().
Zählen Sie nach Bedingungen für Buchstaben
Für Zeichenfolgen können Sie ==, ! = und der str-Accessor von pandas.Series.
- str.enthält()
- str.endswith()
- str.startswith()
- str.match()
Beachten Sie, dass die str-Accessoren für pandas.Series und nicht für pandas.DataFrame sind.
df_str = df[['name', 'state']]
print(df_str)
# name state
# 0 Alice NY
# 1 Bob CA
# 2 Charlie CA
# 3 Dave TX
# 4 Ellen CA
# 5 Frank NY
print((df_str == 'NY').sum())
# name 0
# state 2
# dtype: int64
print(df_str['name'].str.endswith('e'))
# 0 True
# 1 False
# 2 True
# 3 True
# 4 False
# 5 False
# Name: name, dtype: bool
print(df_str['name'].str.endswith('e').sum())
# 3
Zählen Sie NaN und Nicht-NaN
Verwenden Sie die Titanic-Daten mit dem fehlenden Wert NaN.
df = pd.read_csv('data/src/titanic_train.csv')
print(df.head())
# PassengerId Survived Pclass
# 0 1 0 3
# 1 2 1 1
# 2 3 1 3
# 3 4 1 1
# 4 5 0 3
#
# Name Sex Age SibSp
# 0 Braund, Mr. Owen Harris male 22.0 1
# 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1
# 2 Heikkinen, Miss. Laina female 26.0 0
# 3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1
# 4 Allen, Mr. William Henry male 35.0 0
#
# Parch Ticket Fare Cabin Embarked
# 0 0 A/5 21171 7.2500 NaN S
# 1 0 PC 17599 71.2833 C85 C
# 2 0 STON/O2. 3101282 7.9250 NaN S
# 3 0 113803 53.1000 C123 S
# 4 0 373450 8.0500 NaN S
In den following Artikeln FINDEN SIE Informationen zum Entfernen, Ersetzen und Erkennen des fehlenden Werts NaN.
Graf NaN
Verwenden Sie die Methode isnull(), um NaN zu zählen. isnull() bestimmt, ob jedes Element NaN ist oder nicht. Um NaN zu zählen, can SIE sum() wie in den vorherigen Beispielen verwenden.
print(df.isnull().head())
# PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket
# 0 False False False False False False False False False
# 1 False False False False False False False False False
# 2 False False False False False False False False False
# 3 False False False False False False False False False
# 4 False False False False False False False False False
#
# Fare Cabin Embarked
# 0 False True False
# 1 False False False
# 2 False True False
# 3 False False False
# 4 False True False
print(df.isnull().sum())
# PassengerId 0
# Survived 0
# Pclass 0
# Name 0
# Sex 0
# Age 177
# SibSp 0
# Parch 0
# Ticket 0
# Fare 0
# Cabin 687
# Embarked 2
# dtype: int64
print(df.isnull().sum(axis=1).head())
# 0 1
# 1 0
# 2 1
# 3 0
# 4 1
# dtype: int64
print(df.isnull().values.sum())
# 866
Zählen Sie nicht NaN
Verwenden Sie die Methode count(), um Nicht-Nan zu zählen. Wie sum() zählt count() standardmäßig pro Spalte und pro Zeile, wenn Achse=1.
print(df.count())
# PassengerId 891
# Survived 891
# Pclass 891
# Name 891
# Sex 891
# Age 714
# SibSp 891
# Parch 891
# Ticket 891
# Fare 891
# Cabin 204
# Embarked 889
# dtype: int64
print(df.count(axis=1).head())
# 0 11
# 1 12
# 2 11
# 3 12
# 4 11
# dtype: int64
print(df.count().sum())
# 9826
Sie können sterben Anzahl der Nicht-NaN auch mit der Methode info() überprüfen.
df.info()
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 891 entries, 0 to 890
# Data columns (total 12 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 PassengerId 891 non-null int64
# 1 Survived 891 non-null int64
# 2 Pclass 891 non-null int64
# 3 Name 891 non-null object
# 4 Sex 891 non-null object
# 5 Age 714 non-null float64
# 6 SibSp 891 non-null int64
# 7 Parch 891 non-null int64
# 8 Ticket 891 non-null object
# 9 Fare 891 non-null float64
# 10 Cabin 204 non-null object
# 11 Embarked 889 non-null object
# dtypes: float64(2), int64(5), object(5)
# memory usage: 83.7+ KB