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?

Kaggle
la source

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
Jan van der Vegt
la source
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
Icyblade
la source
5

La manière simpliste:

df.isnull().sum(axis=1)
Yuan JI
la source
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.

Chris Ivan
la source
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)
Rakesh Chaudhari
la source
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()
Neil Armstrong
la source
-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
K3 --- rnc
la source
-1

Si vous voulez compter les valeurs manquantes:

np.logical_not(df.isnull()).sum()
Itachi
la source