2013-09-05 5 views
16

nicht dekodieren Ich versuche, einige Daten in Python Pandas zu tun und Probleme beim Schreiben meiner Ergebnisse. Ich lese meine Daten in einer CSV-Datei und exportiert jedes Skript als eigene CSV-Datei, die gut funktioniert. In letzter Zeit, obwohl ich in 1 Export alles versucht haben, Excel mit Arbeitsblatt-Datei und ein paar der Blätter geben Sie mir einen FehlerPython pandas to_excel 'utf8' Codec kann das Byte

„‚utf8‘Codec kann nicht Byte 0xE9 in Position 1 dekodieren: ungültige Fortsetzung Byte“

Ich habe keine Ahnung, wie man überhaupt irgendwelche Zeichen findet, die Probleme beim Exportieren nach Excel verursachen könnten. Nicht sicher, warum es in CSV exportiert obwohl nur gut :(

relevante Linien

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 von anstößigem Datenrahmen

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 

auf dem Excel-Blatt sucht ich bekomme tatsächlich einen Teil Ausdruck Alles in der Vornamenspalte und darüber hinaus sind leer, aber Ereignis, Bestandteil und E-Mail alle drucken

edit: Versuchen, die CSV in lesen als UTF8 schlägt fehl, aber lesen es in als latin1 funktioniert. Gibt es eine Möglichkeit, die to_excel-Codierung anzugeben? Oder dekodiere und kodiere meinen Datenrahmen zu utf8?

+0

Können Sie einige Ihrer möglicherweise anstößigen Unicode-Zeichen posten? Das Erzeugen zufälliger hebräischer Zeichen und das Schreiben von ihnen funktioniert für mich in Ordnung. –

+2

Ich habe keine Ahnung, wie ich finde, welche Figur sie anstößig findet. – Wizuriel

+0

Ein Grund, dass CSV anders ist, liegt darin, dass der Excel-Export nicht von 'Pandas' gemacht wird, sondern von Bibliotheken anderer Hersteller (' xlwt' und/oder 'openpyxl'). –

Antwort

17

verwaltet, um dies zu lösen.

Ich habe eine Funktion gemacht, die durch meine Spalten geht, die Strings haben und es geschafft haben, sie in utf8 zu decodieren/zu codieren, und es funktioniert jetzt.

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

Danke! Diese Funktion war sehr nützlich. Es wäre hilfreich für Pandas, diese Art von Fähigkeiten eingebaut zu haben, anstatt nur einen weniger als aufschlussreichen Fehler zu werfen (oder zumindest die erste Zeile und Spalte zu identifizieren, in der das Problem aufgetreten ist). – murphsp1

1

nicht wissen, wann sie veröffentlicht werden wird, aber Sie können mit meinem GitHub-Repository versuchen:

https://github.com/jtornero/pandas

Sie können es klonen und Pandas von der Quelle bauen; fast löste das Problem ist 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

4

Eigentlich gibt es eine Möglichkeit, UTF-8-Codierung zu erzwingen, indem Sie einen Parameter ExcelWriter vorbei:

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

In '.to_csv' nimmt auch einen optionalen' encoding' Parameter. – notconfusing

11

In meinem Fall war das Problem, dass ich anfänglich lesen die CSV-Datei mit der falschen Codierung (ASCII statt cp1252). Als Pandas dann versuchten, es in eine Excel-Datei zu schreiben, fand es einige Zeichen, die es nicht dekodieren konnte.

Ich löste es durch Angabe der korrekten Codierung beim Lesen der CSV-Datei.

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

Die einfachste Sache ist, Ihren Dataframe in utf-8 zu laden. Dann wird es ExcelWriter wird es kein Problem speichern.

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

behielt ich die gleichen Fehler und das einzige, was von all den Vorschlägen aus, die für mich gearbeitet wurde:

data = pd.read_csv('Filename.csv', encoding='cp1252') 

Vielen Dank!

+0

Diese Antwort wurde zuvor angegeben, und Sie fügen nichts hinzu oder ändern nichts von dieser ursprünglichen Aussage. In Zukunft stimmen Sie einfach die Antwort ab, die für Sie funktioniert hat. –

+0

Ich kann noch nicht abstimmen, aber ich schätze es, dass jemand die einzige Antwort hatte, die für mich funktionierte, also fühlte ich, dass ich etwas tun musste, um ihre Antwort zu bestätigen. Sobald ich genug Wiederholungen habe, werde ich upvote. – Dpsmurphy

Verwandte Themen