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 à obtenir pandas pour lire "nan" sous forme de chaîne, mais je n'arrive 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
dans l'argument converters
à 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 pandas qu'une cellule vide dans une colonne CSV particulière doit être lue comme une chaîne vide au lieu de NaN ?
J'ai ajouté un ticket pour ajouter une option quelconque ici:
https://github.com/pydata/pandas/issues/145
En attendant, result.fillna('')
devrait faire ce que vous voulez
EDIT: dans la version de développement (à ê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ésultat
J'étais encore confus après avoir lu les autres réponses et commentaires. Mais la réponse semble maintenant plus simple, alors c'est parti.
Depuis Pandas version 0.9 (à 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
:
pd.read_csv('test.csv', 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 in
Nous avons un argument simple dans Pandas read_csv pour cela:
Utilisation:
df = pd.read_csv('test.csv', na_filter= False)
La documentation de Pandas explique clairement comment fonctionne l'argument ci-dessus.