Obtenir des pandas.read_csv pour lire des valeurs vides comme une chaîne vide à la place de nan
Je suis en utilisant les pandas de la bibliothèque pour lire dans certains de données CSV. Dans mes données, certaines colonnes contiennent des chaînes de caractères. La chaîne "nan"
est une valeur possible, comme c'est une chaîne vide. J'ai réussi à obtenir pandas à lire "nan" comme une chaîne de caractères, mais je ne peux pas comprendre comment le faire de ne pas lire une valeur vide que 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
Correctement lit "nan" que la chaîne de caractères "nan', mais qui lit encore les cellules vides que NaN. J'ai essayé en passant str
dans le converters
argument read_csv (avec converters={'One': str})
), mais il lit encore les cellules vides comme NaN.
Je me rends compte que je peux remplir les valeurs après la lecture, avec fillna, mais est-il vraiment aucun moyen de dire les pandas qu'une cellule vide dans une colonne CSV doit être lu comme une chaîne vide à la place de NaN?
Vous devez vous connecter pour publier un commentaire.
J'ai ajouté un billet d'ajouter une option de quelque sorte ici:
https://github.com/pydata/pandas/issues/1450
Dans l'intervalle,
result.fillna('')
devrait faire ce que vous voulezEDIT: dans la version de développement (à 0.8.0 final) si vous spécifiez une liste vide de
na_values
, les cordes à vide restera chaînes vides dans le résultatDataFrame.fillna
. Essayezresult.fillna('', inplace=True)
. Sinon, il crée une copie de la dataframe.na_values
(liste ou dict indexés par des colonnes) etkeep_default_na
(bool). Lekeep_default_na
valeur indique si des pandas défaut NA valeurs doit être remplacé ou ajouté. L'OP code ne fonctionne pas actuellement juste, car il manque ce drapeau. 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 'nan' être traité comme un défaut en soit. J'ai ajouté une explication plus détaillée est comme une nouvelle réponse.J'étais encore confus après avoir lu les autres réponses et commentaires. Mais la réponse semble aujourd'hui de plus simple, si vous pouvez y aller.
Depuis Pandas version 0.9 (à partir de 2012), vous pouvez lire un fichier csv avec des cellules vides interprété comme une chaîne vide en définissant simplement
keep_default_na=False
:Ce problème est plus clairement expliqué dans
Qui a été fixé sur le Août 19, 2012 pour les Pandas version 0.9 dans
Nous avons un simple argument dans les Pandas read_csv pour cela:
Utilisation:
Pandas documentation explique clairement comment l'argument ci-dessus fonctionne.
Lien
na_values
reconnaître "nan", mais en tournantna_filter
hors tout irait à l'encontre de cela. Donc ma réponse aveckeep_default_na=False
.