1129 Stimmen

Schreiben eines Pandas DataFrame in eine CSV-Datei

Ich habe einen Datenrahmen in Pandas, den ich in eine CSV-Datei schreiben möchte.

Ich tue dies mit:

df.to_csv('out.csv')

Und ich erhalte den folgenden Fehler:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u03b1' in position 20: ordinal not in range(128)
  • Gibt es eine Möglichkeit, dieses Problem einfach zu umgehen (d. h. ich habe Unicode-Zeichen in meinem Datenrahmen)?
  • Und gibt es eine Möglichkeit, in eine tabulatorgetrennte Datei statt in eine CSV-Datei zu schreiben, z. B. mit einer "to-tab"-Methode (die es meiner Meinung nach nicht gibt)?

1494voto

Andy Hayden Punkte 324102

Zur Abgrenzung durch einen Tabulator können Sie die sep Argument von to_csv :

df.to_csv(file_name, sep='\t')

Um eine bestimmte Kodierung (z.B. 'utf-8') zu verwenden, benutzen Sie die encoding Argument:

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

396voto

Sayan Sil Punkte 5020

Wenn Sie eine DataFrame Objekt in ein csv-Datei unter Verwendung der to_csv Methode, werden Sie wahrscheinlich nicht brauchen, um die vorangehende Indizes eines jeden Zeile der DataFrame Objekt.

Sie können vermeiden dass durch die Übergabe einer False boolescher Wert zu index Parameter.

In etwa so:

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

Wenn Ihr DataFrame-Objekt also etwa so aussieht:

  Color  Number
0   red     22
1  blue     10

Die csv-Datei wird gespeichert:

Color,Number
red,22
blue,10

anstelle von (dem Fall, dass die Standardwert True verabschiedet wurde)

,Color,Number
0,red,22
1,blue,10

40voto

Hrvoje Punkte 9859

Beispiel für den Export in eine Datei mit vollständiger Pfad unter Windows und für den Fall, dass Ihre Datei Kopfzeilen :

df.to_csv (r'C:\Users\John\Desktop\export_dataframe.csv', index = None, header=True) 

Wenn Sie zum Beispiel die Datei in demselben Verzeichnis speichern wollen, in dem sich Ihr Skript befindet, können Sie mit utf-8-Kodierung y Tabulator als Trennzeichen :

df.to_csv(r'./export/dftocsv.csv', sep='\t', encoding='utf-8', header='true')

25voto

Glen Thompson Punkte 7091

Wenn Sie Probleme mit der Kodierung in "utf-8" haben und Zelle für Zelle gehen möchten, können Sie Folgendes versuchen.

Python 2

(Wobei "df" Ihr DataFrame-Objekt ist.)

for column in df.columns:
    for idx in df[column].index:
        x = df.get_value(idx,column)
        try:
            x = unicode(x.encode('utf-8','ignore'),errors ='ignore') if type(x) == unicode else unicode(str(x),errors='ignore')
            df.set_value(idx,column,x)
        except Exception:
            print 'encoding error: {0} {1}'.format(idx,column)
            df.set_value(idx,column,'')
            continue

Dann versuchen Sie es:

df.to_csv(file_name)

Sie können die Kodierung der Spalten überprüfen, indem Sie:

for column in df.columns:
    print '{0} {1}'.format(str(type(df[column][0])),str(column))

Achtung: Bei errors='ignore' wird das Zeichen einfach weggelassen, z. B.

IN: unicode('Regenexx\xae',errors='ignore')
OUT: u'Regenexx'

Python 3

for column in df.columns:
    for idx in df[column].index:
        x = df.get_value(idx,column)
        try:
            x = x if type(x) == str else str(x).encode('utf-8','ignore').decode('utf-8','ignore')
            df.set_value(idx,column,x)
        except Exception:
            print('encoding error: {0} {1}'.format(idx,column))
            df.set_value(idx,column,'')
            continue

17voto

Harsha Komarraju Punkte 186

Manchmal treten diese Probleme auf, wenn Sie auch die UTF-8-Kodierung angeben. Ich empfehle Ihnen, die Kodierung beim Lesen der Datei und die gleiche Kodierung beim Schreiben in die Datei anzugeben. Dies könnte Ihr Problem lösen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X