wake-up-neo.com

Python Pandas to_Excel 'utf8' Codec kann kein Byte decodieren

Ich versuche, einige Daten in Python-Pandas zu bearbeiten und habe Schwierigkeiten, meine Ergebnisse zu schreiben. Ich lese meine Daten als CSV-Datei und exportiere jedes Skript als eigene CSV-Datei, die gut funktioniert. In letzter Zeit habe ich jedoch versucht, alles in 1 Excel-Datei mit Arbeitsblättern zu exportieren, und einige Blätter geben mir einen Fehler 

"'utf8' Codec kann das Byte 0xe9 an Position 1 nicht dekodieren: ungültiges Fortsetzungsbyte"

Ich habe keine Ahnung, wie ich überhaupt nach Zeichen suchen könnte, die beim Exportieren nach Excel Probleme verursachen könnten. Nicht sicher, warum es nach CSV exportiert wird :(

relevanten Zeilen

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()

druckkopf des fehlerhaften Datenrahmens

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

wenn ich mir die Excel-Tabelle anschaue, bekomme ich tatsächlich einen partiellen Ausdruck. Alles in der ersten Spalte und darüber hinaus ist leer, aber Ereignis, Bestandteil und E-Mail werden gedruckt. 

edit: Der Versuch, die csv-Datei als utf8 einzulesen, schlägt fehl, aber das Lesen in latin1 funktioniert. Gibt es eine Möglichkeit, die to_Excel-Kodierung anzugeben? Oder mein Datenframe in utf8 decodieren und codieren? 

18
Wizuriel

Es wurde geschafft, dieses Problem zu lösen.

Ich habe eine Funktion erstellt, die meine Spalten mit Strings durchläuft, und es geschafft hat, sie in utf8 zu decodieren/codieren. Jetzt funktioniert das.

def changeencode(data, cols):
    for col in cols:
        data[col] = data[col].str.decode('iso-8859-1').str.encode('utf-8')
    return data   
18
Wizuriel

In meinem Fall bestand das Problem darin, dass ich anfangs die CSV-Datei mit der falschen Kodierung (ASCII anstelle von cp1252) Lesen hatte. Als Pandas versuchte, sie in eine Excel-Datei zu schreiben, wurden einige Zeichen gefunden, die nicht dekodiert werden konnten.

Ich habe es gelöst, indem ich beim Lesen der CSV-Datei die richtige Kodierung angegeben habe.

data = pd.read_csv(fname, encoding='cp1252')
13
Zenadix

Tatsächlich gibt es eine Möglichkeit, die utf8-Kodierung durch Übergabe eines Parameters an ExcelWriter zu erzwingen:

 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()
5
user3570953

Das einfachste ist das Laden Ihres Datenrahmens in utf-8. Dann wird es mit ExcelWriter kein Problem speichern. 

data = pd.read_csv(path,encoding='utf-8')
2
billmanH

ich weiß nicht, wann es veröffentlicht werden wird, aber Sie können es mit meinem Github-Repository versuchen:

https://github.com/jtornero/pandas

Sie können es klonen und Pandas aus der Quelle erstellen. Das Problem ist fast gelöst und es funktioniert wie

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()

Prost

Jorge Tornero

1
Jorge Tornero

Ähnlich wie bei @Zenadix wurde beim Lesen der csvs als UTF-8 der ExcelWriter ohne Fehler geschrieben.

df = pd.read_csv('path', encoding='utf-8')

...

with pd.ExcelWriter('new_path') as writer:
    df.to_Excel(writer, sheet_name='Foo')


0
Joe Banks