web-dev-qa-db-fra.com

Pandas dropna () fonction ne fonctionne pas

J'essaie de supprimer les valeurs NA d'un pandas dataframe.

J'ai utilisé dropna() (qui devrait supprimer toutes les lignes NA du dataframe). Pourtant, cela ne fonctionne pas.

Voici le code:

import pandas as pd
import numpy as np
prison_data = pd.read_csv('https://andrewshinsuke.me/docs/compas-scores-two-years.csv')

Voilà comment vous obtenez la trame de données. Comme le montre l'illustration suivante, la méthode par défaut read_csv Convertit en effet les points de données NA en np.nan.

np.isnan(prison_data.head()['out_custody'][4])

Out[2]: True

Idéalement, la head() de la DF contient déjà une valeur NaN (dans la colonne out_custody), Donc en imprimant prison_data.head() this, vous obtenez:

   id                name   first         last compas_screening_date   sex  

0   1    miguel hernandez  miguel    hernandez            2013-08-14  Male
1   3         kevon dixon   kevon        dixon            2013-01-27  Male
2   4            ed philo      ed        philo            2013-04-14  Male
3   5         marcu brown   marcu        brown            2013-01-13  Male
4   6  bouthy pierrelouis  bouthy  pierrelouis            2013-03-26  Male

      dob  age          age_cat              race      ...        
0  1947-04-18   69  Greater than 45             Other      ...
1  1982-01-22   34          25 - 45  African-American      ...
2  1991-05-14   24     Less than 25  African-American      ...
3  1993-01-21   23     Less than 25  African-American      ...
4  1973-01-22   43          25 - 45             Other      ...

   v_decile_score  v_score_text  v_screening_date  in_custody  out_custody  

0               1           Low        2013-08-14  2014-07-07   2014-07-14
1               1           Low        2013-01-27  2013-01-26   2013-02-05
2               3           Low        2013-04-14  2013-06-16   2013-06-16
3               6        Medium        2013-01-13         NaN          NaN
4               1           Low        2013-03-26         NaN          NaN

priors_count.1 start   end event two_year_recid
0               0     0   327     0              0
1               0     9   159     1              1
2               4     0    63     0              1
3               1     0  1174     0              0
4               2     0  1102     0              0

Cependant, l'exécution de prison_data.dropna() ne modifie en rien la trame de données.

prison_data.dropna()
np.isnan(prison_data.head()['out_custody'][4])


Out[3]: True
8

df.dropna() par défaut renvoie un nouvel ensemble de données sans NaN valeurs. Donc, vous devez l'affecter à la variable

df = df.dropna()

si vous voulez qu'il modifie le df sur place, vous devez spécifier explicitement

df.dropna(inplace= True)
12
rafaelc

cela ne fonctionnait pas car il y avait au moins un nan par ligne

0