1091 votes

Écriture d'un DataFrame pandas dans un fichier CSV

J'ai un cadre de données dans pandas que je voudrais écrire dans un fichier CSV.

Je le fais en utilisant :

df.to_csv('out.csv')

Et j'obtiens l'erreur suivante :

UnicodeEncodeError: 'ascii' codec can't encode character u'\u03b1' in position 20: ordinal not in range(128)
  • Existe-t-il un moyen de contourner facilement ce problème (c'est-à-dire que j'ai des caractères unicodes dans mon cadre de données) ?
  • Existe-t-il un moyen d'écrire dans un fichier délimité par des tabulations au lieu d'un CSV en utilisant, par exemple, une méthode 'to-tab' (qui, à mon avis, n'existe pas) ?

20voto

Si la solution ci-dessus ne fonctionne pas pour quelqu'un ou si le CSV s'embrouille, supprimez simplement sep='\t' de la ligne comme ceci :

df.to_csv(file_name, encoding='utf-8')

0 votes

Dans le cas où mon script s'exécute sur un serveur et que je dois créer un nouveau csv à chaque fois qu'il s'exécute et fournir un chemin d'accès au serveur. comment faire et comment supprimer le fichier après création ? (créer > lire > supprimer ?

0 votes

Je ne suis pas sûr, je n'ai pratiquement pas d'expérience dans ce domaine.

18voto

Harsha Komarraju Points 156

Parfois, vous rencontrez ces problèmes si vous spécifiez également l'encodage UTF-8. Je vous recommande de spécifier l'encodage pendant la lecture du fichier et le même encodage pendant l'écriture dans le fichier. Cela pourrait résoudre votre problème.

12voto

Yury Wallet Points 374

Il se peut que ce ne soit pas la réponse à ce cas, mais comme j'ai eu le même message d'erreur avec .to_csv J'ai essayé .toCSV('name.csv') et le message d'erreur était différent ("" SparseDataFrame' object has no attribute 'toCSV' ). Le problème a donc été résolu en transformant le dataframe en dataframe dense.

df.to_dense().to_csv("submission.csv", index = False, sep=',', encoding='utf-8')

1 votes

Vous avez eu l'erreur dans le second car il semble que vous ayez utilisé .toCSV et non .to_csv . Vous avez oublié le trait de soulignement

4voto

J'éviterais d'utiliser l'option ' \t et créerait des problèmes lors de la relecture de l'ensemble de données.

df.to_csv(nom_fichier, encodage='utf-8')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X