Cet article explique comment compter les valeurs dans un tableau ๐ฉโ๐โ๐งโ๐โ๐โ๐ฌโ.D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ ou ๐ฉโ๐โ๐งโ๐โ๐โ๐ฌโ.S๐โ๐ซโ๐ขโ๐โ๐ฌโ qui rรฉpond ร des conditions spรฉcifiques par colonne, par ligne et au total.
La mรฉthode ๐โ๐จโ๐ฎโ๐งโ๐ญโ() de D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ et S๐โ๐ซโ๐ขโ๐โ๐ฌโ , qui sera expliquรฉe plus tard, compte le nombre de valeurs non N๐โN .
Pour les mรฉthodes d’extraction de lignes qui rรฉpondent aux conditions et de comptage du nombre de valeurs uniques dans chaque colonne, reportez-vous aux articles suivants.
- pandas : sรฉlectionner des lignes selon plusieurs conditions
- pandas : Obtenez des valeurs uniques et leurs nombres dans une colonne
La version pandas utilisรฉe dans cet article est la suivante. Notez que les fonctionnalitรฉs peuvent varier selon les versions. Le D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ suivant est utilisรฉ comme exemple.
import pandas as pd print(pd.__version__) # 2.1.4 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
Comment compter les valeurs avec des conditions
Le processus de comptage des valeurs qui rรฉpondent ร des conditions spรฉcifiques est le suivant :
- รvaluez chaque valeur pour produire une valeur boolรฉenne D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ ou S๐โ๐ซโ๐ขโ๐โ๐ฌโ , en utilisant des mรฉthodes telles que des opรฉrateurs de comparaison ou des accesseurs de chaรฎne.
- Utilisez la mรฉthode ๐ฌโ๐ฎโ๐ฆโ() pour compter les valeurs T๐ซโ๐ฎโ๐โ
- D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ
- Compteur par colonne : ๐ฌโ๐ฎโ๐ฆโ()
- Compteur par ligne : ๐ฌโ๐ฎโ๐ฆโ(๐โ๐ฑโ๐ขโ๐ฌโ=1)
- Comptez au total : ๐ฌโ๐ฎโ๐ฆโ().๐ฌโ๐ฎโ๐ฆโ() ou ๐ฏโ๐โ๐ฅโ๐ฎโ๐โ๐ฌโ.๐ฌโ๐ฎโ๐ฆโ()
- S๐โ๐ซโ๐ขโ๐โ๐ฌโ
- Comptez au total : ๐ฌโ๐ฎโ๐ฆโ()
- D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ
D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ
Lorsque vous appliquez des opรฉrateurs de comparaison ร un D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ ou S๐โ๐ซโ๐ขโ๐โ๐ฌโ , il tient compte de chaque valeur, ce qui gรฉnรจre une D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ ou S๐โ๐ซโ๐ขโ๐โ๐ฌโ boolรฉen de la mรชme taille.
Les parenthรจses () sur le cรดtรฉ droit sont facultatives.
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
รtant donnรฉ que T๐ซโ๐ฎโ๐โ est traitรฉ comme 1 et F๐โ๐ฅโ๐ฌโ๐โ comme 0 en Python, vous pouvez compter les valeurs qui remplissent les conditions ร l’aide de la mรฉthode ๐ฌโ๐ฎโ๐ฆโ() . Par dรฉfaut, elle compte par colonne et le paramรจtre ๐โ๐ฑโ๐ขโ๐ฌโ=1 compte par ligne.
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
La mรฉthode ๐ฌโ๐ฎโ๐ฆโ() de D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ renvoie un S๐โ๐ซโ๐ขโ๐โ๐ฌโ . L’appel de ๐ฌโ๐ฎโ๐ฆโ() sur ce S๐โ๐ซโ๐ขโ๐โ๐ฌโ donne le nombre total.
print(df_bool.sum().sum()) # 3
Un D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ peut รชtre converti en un tableau NumPy ( ๐งโ๐โ๐โ๐ซโ๐ซ๐โ๐ฒโ ) ร l’aide de l’attribut ๐ฏโ๐โ๐ฅโ๐ฎโ๐โ๐ฌโ .
La mรฉthode ๐ฌโ๐ฎโ๐ฆโ() de ๐งโ๐โ๐โ๐ซโ๐ซโ๐โ๐ฒโ calcule par dรฉfaut la somme sur l’ensemble du tableau. Par consรฉquent, l’appel de ๐ฌโ๐ฎโ๐ฆโ() sur l’attribut ๐ฏโ๐โ๐ฅโ๐ฎโ๐โ๐ฌโ ( ๐งโ๐โ๐โ๐ซโ๐ซโ๐โ๐ฒโ ) rรฉcupรจre le nombre total de valeurs qui rรฉpondent ร la condition.
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
Vous pouvez รฉcrire comme suit :
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
Notez que l’exรฉcution d’opรฉrations de comparaison numรฉrique sur un D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ avec des colonnes numรฉriques et de chaรฎne mixtes entraรฎnera une erreur. Les dรฉtails seront abordรฉs plus tard.
S๐โ๐ซโ๐ขโ๐โ๐ฌโ
Considรฉrez le S๐โ๐ซโ๐ขโ๐โ๐ฌโ suivant .
s = df['age'] print(s) # 0 24 # 1 42 # 2 18 # 3 68 # 4 24 # 5 30 # Name: age, dtype: int64
La procรฉdure est la mรชme qu’avec D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ . รtant donnรฉ que S๐โ๐ซโ๐ขโ๐โ๐ฌโ est unidimensionnel, la mรฉthode ๐ฌโ๐ฎโ๐ฆโ() renvoie le nombre total.
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
Pour compter les valeurs qui remplissent une condition dans n’importe quelle ligne ou colonne d’un D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ , specz la ligne ou la colonne ร l’aide de [] , ๐ฅโ๐จโ๐โ[] , ๐ขโ๐ฅโ๐จโ๐โ[] et exรฉcuter le mรชme processus.
- pandas : Sรฉlectionner des lignes/colonnes par index (numรฉros et noms)
- pandas : obtenir/dรฉfinir des valeurs avec loc, iloc, at, iat
Conditions multiples (ET, OU, NON)
Pour combiner plusieurs conditions, placez chacune d’elles entre parenthรจses () et reliez-les ร l’aide de l’opรฉrateur & pour AND ou de l’opรฉrateur | verser OU. L’opรฉrateur ~ ( NOT ) peut รฉgalement รชtre utilisรฉ.
print((df == 'CA') | (df == 70)) # 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 == 'CA')) # 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['state'] == 'CA') & (df['age'] < 30)) # 0 False # 1 False # 2 True # 3 False # 4 True # 5 False # dtype: bool
Notez que l’utilisation de ๐โ๐งโ๐โ et ๐จโ๐ซโ au lieu de & et | , ou l’omission des parenthรจses, entraรฎnera une erreur.
Une fois qu’un boolรฉen D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ ou S๐โ๐ซโ๐ขโ๐โ๐ฌโ est obtenu, vous pouvez compter les valeurs qui remplissent les conditions en utilisant la mรฉthode ๐ฌโ๐ฎโ๐ฆโ() comme mentionnรฉ ci-dessus.
Spรฉcifier les conditions pour les valeurs numรฉriques
Comme vu dans les exemples prรฉcรฉdents, les opรฉrateurs de comparaison, tels que < , <= , > , >= , == , != , peuvent รชtre utilisรฉs pour les valeurs numรฉriques.
Cependant, sachez que l’application de ces ร un D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ qui inclut des colonnes de chaรฎne, lors de la comparaison avec des valeurs numรฉriques, entraรฎnera une erreur. Pour travailler spรฉcifiquement avec des colonnes numรฉriques, utilisez la mรฉthode ๐ฌโ๐โ๐ฅโ๐โ๐โ๐ญโ_๐โ๐ญโ๐ฒโ๐ฉโ๐โ๐ฌโ() .
# print(df < 65) # TypeError: '<' not supported between instances of 'str' and 'int' df_num = df.select_dtypes('number') 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 < 65).sum()) # age 5 # point 2 # dtype: int64 print(((df_num > 35) & (df_num < 65)).sum()) # age 1 # point 2 # dtype: int64
Spรฉcifier les conditions pour les chaรฎnes
Pour les opรฉrations de chaรฎne dans S๐โ๐ซโ๐ขโ๐โ๐ฌโ , en plus de == et != , il existe des mรฉthodes supplรฉmentaires disponibles via l’accesseur de chaรฎne ( ๐ฌโ๐ญโ๐ซโ ) :
- ๐ฌโ๐ญโ๐ซโ.๐โ๐จโ๐งโ๐ญโ๐โ๐ขโ๐งโ๐ฌโ() : Vรฉrifie si chaque chaรฎne contient une sous-chaรฎne spรฉcifique
- ๐ฌโ๐ญโ๐ซโ.๐โ๐งโ๐โ๐ฌโ๐ฐโ๐ขโ๐ญโ๐กโ() : Vรฉrifie si chaque chaรฎne se termine par une sous-chaรฎne spรฉcifique
- ๐ฌโ๐ญโ๐ซโ.๐ฌโ๐ญโ๐โ๐ซโ๐ญโ๐ฌโ๐ฐโ๐ขโ๐ญโ๐กโ() : Vรฉrifie si chaque chaรฎne commence par une sous-chaรฎne spรฉcifique.
- ๐ฌโ๐ญโ๐ซโ.๐ฆโ๐โ๐ญโ๐โ๐กโ() : Vรฉrifie chaque chaรฎne par rapport ร un modรจle d’expression rรฉguliรจre (regex)
Notez que l’accesseur ๐ฌโ๐ญโ๐ซโ est spรฉcifique ร S๐โ๐ซโ๐ขโ๐โ๐ฌโ et indisponible pour D๐โ๐ญโ๐โF๐ซโ๐โ๐ฆโ๐โ .
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
Consultez l’article suivant pour savoir comment extraire des lignes ร l’aide de l’accesseur ๐ฌโ๐ญโ๐ซโ .
Comptez les valeurs N๐โN et non- N๐โN
ร titre d’exemple, saisissez les donnรฉes sur les survivants du Titanic.
df_titanic = pd.read_csv('data/src/titanic_train.csv') print(df_titanic.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
Consultez les articles suivants pour obtenir des informations sur la suppression, le remplacement et la dรฉtection de N๐โN .
- pandas : supprime NaN (valeurs manquantes) avec dropna()
- pandas : remplacez NaN (valeurs manquantes) par fillna()
- pandas : dรฉtecter et compter les NaN (valeurs manquantes) avec isnull(), isna()
Compter les valeurs N๐โN
Pour compter N๐โN valeurs, utilisez la mรฉthode ๐ขโ๐ฌโ๐งโ๐ฎโ๐ฅโ๐ฅโ() , qui vรฉrifie si chaque valeur est N๐โN . Vous pouvez utiliser ๐ฌโ๐ฎโ๐ฆโ() comme dans les exemples prรฉcรฉdents.
print(df_titanic.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_titanic.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_titanic.isnull().sum(axis=1).head()) # 0 1 # 1 0 # 2 1 # 3 0 # 4 1 # dtype: int64 print(df_titanic.isnull().values.sum()) # 866
Compter les valeurs non N๐โN : ๐โ๐จโ๐ฎโ๐งโ๐ญโ()
Pour compter les valeurs non N๐โN , utilisez la mรฉthode ๐โ๐จโ๐ฎโ๐งโ๐ญโ() . Similaire ร ๐ฌโ๐ฎโ๐ฆโ() , elle compte par colonne par dรฉfaut, et le paramรจtre ๐โ๐ฑโ๐ขโ๐ฌโ=1 compte par ligne.
- pandas.DataFrame.count โ documentation de pandas 2.1.4
- pandas.Series.count โ documentation de pandas 2.1.4
print(df_titanic.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_titanic.count(axis=1).head()) # 0 11 # 1 12 # 2 11 # 3 12 # 4 11 # dtype: int64 print(df_titanic.count().sum()) # 9826 print(df_titanic['Age'].count()) # 714
Pour vรฉrifier simplement le nombre de valeurs non N๐โN , il peut รชtre affichรฉ ร l’aide de la mรฉthode ๐ขโ๐งโ๐โ๐จโ() .
df_titanic.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
