Bonjour,
J’ai un Data Frame à étudier dans le cadre de mon projet qui contient un colonne de type ‹ Object › que je voudrais convertir en ‹ float ›.
J’ai tout essayé mais à chaque fois ça me vide la colonne. J’ai donc la colonne en NaNs.
Avez vous une idée ?
Oui, Christine, c’est la procédure à suivre dans une approche data quality : d’abord identifier les anomalies, puis les nettoyer et enfin convertir le type de la colonne si nécessaire. Je dis bien si nécessaire car un code postal doit pour moi rester de type str (on ne fait aucun calcul sur un tel champ et dans certains pays il peut contenir autre chose que des chiffres).
En reprenant ton dernier exemple, la ligne suivante te donnera la liste des lignes dont le code postal n’est pas numérique :
df[df.CP.str.isdecimal()==False]
Dans une approche plus générique, on utiliserait une expression régulière pour vérifier également la longeur et d’autres règles de validation.
Tu peux également utiliser la suggestion de Gaspard avec le paramètre errors='raise' mais ceci t’indiquera la première ligne dans la liste où une erreur est rencontrée. Tu devrais répéter cela autant de fois qu’il y a de code postaux erronés. Mieux vaut en produire la liste directement comme ci-dessus.
J’avoue me prendre les pieds dans la tapis car j’ai essayé avec un autre exemple de taux d’interêt de type object que je n’arrive pas à convertir en numérique car j’ai des " " ?
Petit conseil : n’oublie pas de marquer ton code comme texte préformaté (icone </>), sinon les quote et double-quote sont transformés !
Même principe que ton problème précédent, ici tu dois d’abord détecter toutes les lignes dont le taux ne correspond pas à la représentation string d’un float puis décider de ce que tu fais avec (effacer la ligne, remplacer par un taux = '0', remplacer par la moyenne ou par le mode…).
Pour détecter ces lignes, il n’y a malhereusement pas de fonction isfloat(), mais tu peux l’implémenter comme ci-dessous puis appliquer une lambda sur la colonne (ou faire en sorte que isfloat() accepte une Series en argument).
P. S. Note que lors de l’import d’un CSV, le cas que tu donnes ne devrait pas se produire : la colonne serait float et les taux vides seraient des NaN. A vérifier !