Skip to content

Pandas: DataFrame/Series Elemente zählen, die Bedingungen erfüllen

Python

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:

  1. Rufen Sie pandas.DataFrame und pandas.Series vom Typ bool ab
  2. 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()
    • pandas.Serie

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