J'essaie de travailler sur des données dans des pandas Python et j'ai du mal à écrire mes résultats ..__ J'ai lu mes données dans un fichier CSV et j'ai exporté chaque script en tant que fichier CSV propre qui fonctionne bien. Dernièrement bien que j'ai essayé d'exporter tout dans 1 fichier Excel avec des feuilles de calcul et quelques feuilles me donnent une erreur
"Le codec 'utf8' ne peut pas décoder l'octet 0xe9 en position 1: octet de continuation non valide"
Je ne sais même pas comment commencer à rechercher des caractères susceptibles de poser des problèmes d’exportation vers Excel. Je ne sais pas pourquoi il exporte au format CSV: ((
lignes pertinentes
from pandas import ExcelWriter
data = pd.read_csv(input)
writer = ExcelWriter(output) #output is just the filename
fundraisers.to_Excel(writer, "fundraisers")
locations.to_Excel(writer, "locations") #error
locations.to_csv(outputcsv) #works
writer.save()
tête d'impression de la trame de données incriminée
Event ID Constituent ID Email Address First Name \ Last Name
f 1 A A 1
F 4 L R C
M 1 1 A D
F 4 A A G
M 2 0 R G
M 3 O O H
M 2 T E H
M 2 A A H
M 2 M M K
F 3 J E K
Location ID raised raised con raised email
a 0 0 0
a 8 0 0
o 0 0 0
o 0 0 0
o 0 0 0
t 5 0 0
o 1 0 0
o 6 a 0
o 6 0 0
d 0 0 0
en regardant la feuille Excel, je reçois une impression partielle. Tout ce qui se trouve dans la colonne du prénom et au-delà est vide, mais l'événement, le constituant et l'adresse électronique sont tous imprimés.
edit: Essayer de lire le csv en tant que utf8 échoue, mais de le lire en tant que latin1 fonctionne. Est-il possible de spécifier le codage to_Excel? Ou décoder et encoder mon dataframe en utf8?
Géré pour résoudre ceci.
J'ai créé une fonction qui parcourt mes colonnes avec des chaînes et je suis parvenue à les décoder/encoder en utf8 et cela fonctionne maintenant.
def changeencode(data, cols):
for col in cols:
data[col] = data[col].str.decode('iso-8859-1').str.encode('utf-8')
return data
Dans mon cas, le problème était que je lisais initialement le fichier CSV avec le mauvais codage (ASCII
au lieu de cp1252
). Par conséquent, lorsque les pandas ont essayé de l'écrire dans un fichier Excel, il a trouvé des caractères qu'il ne pouvait pas décoder.
Je l'ai résolu en spécifiant le codage correct lors de la lecture du fichier CSV.
data = pd.read_csv(fname, encoding='cp1252')
En fait, il existe un moyen de forcer le codage utf8 en transmettant un paramètre à ExcelWriter:
ew = pandas.ExcelWriter('test.xlsx',options={'encoding':'utf-8'})
sampleList = ['Miño', '1', '2', 'señora']
dataframe = pandas.DataFrame(sampleList)
dataframe.to_Excel(ew)
ew.save()
Le plus simple est de charger votre dataframe dans utf-8. Ensuite, ExcelWriter ne l’enregistrera pas.
data = pd.read_csv(path,encoding='utf-8')
je ne sais pas quand ça va être publié, mais vous pouvez essayer avec mon dépôt github:
https://github.com/jtornero/pandas
Vous pouvez le cloner et construire des pandas à partir de la source; le problème est presque résolu et cela fonctionne comme
sampleList = ['Miño', '1', '2', 'señora']
dataframe = pandas.DataFrame(sampleList)
ew = pandas.ExcelWriter('./test.xls', encoding='utf-8')
dataframe.to_Excel(ew)
ew.save()
À votre santé
Jorge Tornero
Semblable à ce que disait @Zenadix, lire les csv au format UTF-8 permettait à ExcelWriter d’écrire sans erreur.
df = pd.read_csv('path', encoding='utf-8')
...
with pd.ExcelWriter('new_path') as writer:
df.to_Excel(writer, sheet_name='Foo')