Réponses:
Vous pouvez appliquer un décompte sur les lignes comme ceci:
test_df.apply(lambda x: x.count(), axis=1)
test_df:
A B C
0: 1 1 3
1: 2 nan nan
2: nan nan nan
production:
0: 3
1: 1
2: 0
Vous pouvez ajouter le résultat sous forme de colonne comme ceci:
test_df['full_count'] = test_df.apply(lambda x: x.count(), axis=1)
Résultat:
A B C full_count
0: 1 1 3 3
1: 2 nan nan 1
2: nan nan nan 0
Lors de l' utilisation pandas géants, essayez d'éviter d'effectuer des opérations dans une boucle, y compris apply
, map
, applymap
etc. C'est lent!
Si vous souhaitez compter les valeurs manquantes dans chaque colonne, essayez:
df.isnull().sum()
ou df.isnull().sum(axis=0)
D'un autre côté, vous pouvez compter dans chaque ligne (ce qui est votre question) en:
df.isnull().sum(axis=1)
C'est environ 10 fois plus rapide que la solution de Jan van der Vegt (BTW il compte des valeurs valides plutôt que des valeurs manquantes):
In [18]: %timeit -n 1000 df.apply(lambda x: x.count(), axis=1)
1000 loops, best of 3: 3.31 ms per loop
In [19]: %timeit -n 1000 df.isnull().sum(axis=1)
1000 loops, best of 3: 329 µs per loop
Ou, vous pouvez simplement utiliser la méthode info pour les objets de trame de données:
df.info()
qui fournit le nombre de valeurs non nulles pour chaque colonne.
des valeurs nulles le long de la colonne,
df.isnull().sum(axis=0)
des valeurs vides le long de la colonne,
c = (df == '').sum(axis=0)
des valeurs nulles le long de la ligne,
df.isnull().sum(axis=1)
des valeurs vides le long de la ligne,
c = (df == '').sum(axis=1)
Cet extrait renvoie la valeur entière du nombre total de colonnes avec une valeur manquante:
(df.isnull().sum() > 0).astype(np.int64).sum()
>>> df = pd.DataFrame([[1, 2, np.nan],
... [np.nan, 3, 4],
... [1, 2, 3]])
>>> df
0 1 2
0 1 2 NaN
1 NaN 3 4
2 1 2 3
>>> df.count(axis=1)
0 2
1 2
2 3
dtype: int64