Le code ci-dessous fait le travail, MAIS ses performances en pâtissent, car il s'agit d'un DataFrame avec des # enregistrements de 100k ou plus :
df.fillna(df.mean())
D'après mon expérience, il convient de remplacer les valeurs NaN (que ce soit par la moyenne ou la médiane), uniquement là où c'est nécessaire, plutôt que d'appliquer fillna() à l'ensemble du DataFrame .
J'avais un DataFrame avec 20 variables, et seulement 4 d'entre elles nécessitaient le traitement de valeurs NaN (remplacement). J'ai essayé le code ci-dessus (code 1), ainsi qu'une version légèrement modifiée de celui-ci (code 2), où je l'ai exécuté de manière sélective, c'est-à-dire uniquement sur les variables qui avaient une valeur NaN.
#------------------------------------------------
#----(Code 1) Treatment on overall DataFrame-----
df.fillna(df.mean())
#------------------------------------------------
#----(Code 2) Selective Treatment----------------
for i in df.columns[df.isnull().any(axis=0)]: #---Applying Only on variables with NaN values
df[i].fillna(df[i].mean(),inplace=True)
#---df.isnull().any(axis=0) gives True/False flag (Boolean value series),
#---which when applied on df.columns[], helps identify variables with NaN values
Voici les performances que j'ai observées lorsque j'ai continué à augmenter le nombre d'enregistrements dans le DataFrame.
DataFrame avec ~100k enregistrements
- Code 1 : 22,06 secondes
- Code 2 : 0,03 seconde
DataFrame avec ~200k enregistrements
- Code 1 : 180,06 secondes
- Code 2 : 0,06 seconde
DataFrame avec ~1.6 Million d'enregistrements
- Code 1 : le code s'exécute sans fin
- Code 2 : 0,40 seconde
DataFrame avec ~13 millions d'enregistrements
- Code 1 : --n'a même pas essayé, après avoir vu les performances sur 1,6 millions d'enregistrements--.
- Code 2 : 3,20 secondes
Toutes mes excuses pour cette longue réponse ! J'espère que cela vous aidera !