Comment compter le nombre de valeurs manquantes dans chaque ligne dans la trame de données Pandas?


17

Comment puis-je obtenir le nombre de valeurs manquantes dans chaque ligne dans la trame de données Pandas. Je voudrais diviser la trame de données en différentes trames de données qui ont le même nombre de valeurs manquantes dans chaque ligne.

Toute suggestion?

Réponses:


19

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

Fonctionne parfaitement! Merci.
Kaggle

40

Lors de l' utilisation pandas géants, essayez d'éviter d'effectuer des opérations dans une boucle, y compris apply, map, applymapetc. 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


4

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.


2

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)

0

Cet extrait renvoie la valeur entière du nombre total de colonnes avec une valeur manquante:

(df.isnull().sum() > 0).astype(np.int64).sum()

-1
>>> 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

-1

Si vous voulez compter les valeurs manquantes:

np.logical_not(df.isnull()).sum()
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.