J'utilise la bibliothèque pandas pour lire certaines données CSV. Dans mes données, certaines colonnes contiennent des chaînes. La chaîne "nan"
est une valeur possible, tout comme une chaîne vide. J'ai réussi à amener les pandas à lire "nan" comme une chaîne, mais je ne peux pas comprendre comment l'obtenir pour ne pas lire une valeur vide comme NaN. Voici des exemples de données et de sortie
One,Two,Three
a,1,one
b,2,two
,3,three
d,4,nan
e,5,five
nan,6,
g,7,seven
>>> pandas.read_csv('test.csv', na_values={'One': [], "Three": []})
One Two Three
0 a 1 one
1 b 2 two
2 NaN 3 three
3 d 4 nan
4 e 5 five
5 nan 6 NaN
6 g 7 seven
Il lit correctement "nan" comme la chaîne "nan ', mais lit toujours les cellules vides comme NaN. J'ai essayé de passer str
l' converters
argument à read_csv (avec converters={'One': str})
), mais il lit toujours les cellules vides comme NaN.
Je me rends compte que je peux remplir les valeurs après lecture, avec fillna, mais n'y a-t-il vraiment aucun moyen de dire aux pandas qu'une cellule vide dans une colonne CSV particulière doit être lue comme une chaîne vide au lieu de NaN?
keep_default_na
ci-dessous.Réponses:
J'ai ajouté un ticket pour ajouter une option quelconque ici:
https://github.com/pydata/pandas/issues/1450
En attendant,
result.fillna('')
tu devrais faire ce que tu veuxEDIT: dans la version de développement (pour être 0.8.0 final) si vous spécifiez une liste vide de
na_values
, les chaînes vides resteront des chaînes vides dans le résultatla source
DataFrame.fillna
. Essayezresult.fillna('', inplace=True)
. Sinon, il crée une copie du dataframe.na_values
(list ou dict indexé par colonnes) etkeep_default_na
(bool). Lakeep_default_na
valeur indique si les valeurs NA par défaut des pandas doivent être remplacées ou ajoutées. Le code de l'OP ne fonctionne pas actuellement simplement parce qu'il manque cet indicateur. Pour cet exemple, vous pouvez utiliserpandas.read_csv('test.csv',na_values=['nan'], keep_default_na=False)
.keep_default_na
. Mais notez qu'il ne veut pas non plus que «nan» soit traité par défaut. J'ai ajouté une explication plus complète en tant que nouvelle réponse.keep_default_na=False
) mais le comportement par défaut des pandas à ce sujet est mauvais pour l'OMI. si, pour une raison quelconque, pandas read_csv déduit qu'une colonne n'est pas numérique, il ne devrait pas changer automatiquement les chaînes vides en NaN.J'étais toujours confus après avoir lu les autres réponses et commentaires. Mais la réponse semble maintenant plus simple, alors allez-y.
Depuis la version 0.9 de Pandas (à partir de 2012), vous pouvez lire votre csv avec des cellules vides interprétées comme des chaînes vides en définissant simplement
keep_default_na=False
:Ce problème est expliqué plus clairement dans
Cela a été corrigé le 19 août 2012 pour Pandas version 0.9 dans
la source
Nous avons un argument simple dans Pandas read_csv pour cela:
Utilisation:
La documentation Pandas explique clairement comment fonctionne l'argument ci-dessus.
Lien
la source
na_values
pour reconnaître « nan », mais tournantna_filter
hors serait tout à vaincre cela. Ainsi ma réponse aveckeep_default_na=False
.