Schreiben eines Pandas DataFrame in eine CSV-Datei

Lesezeit: 5 Minuten

Benutzer-Avatar
Benutzer7289

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

Ich mache das mit:

df.to_csv('out.csv')

Und erhalte folgenden Fehler:

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

Um durch einen Tabulator zu trennen, können Sie die verwenden sep Argument von to_csv:

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

Um eine bestimmte Kodierung (z. B. ‘utf-8’) zu verwenden, verwenden Sie die encoding Streit:

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

  • Ich würde hinzufügen index=False um den Index zu löschen.

    – Medhat

    3. Juli 2019 um 20:48 Uhr

  • Ich war zunächst verwirrt darüber, wie ich eine Antwort auf die Frage fand, die ich bereits vor 7 Jahren geschrieben hatte.

    – Hayden

    30. Januar 2020 um 17:49 Uhr

  • Nur eine kleine Warnung für andere Leute, die die Funktion verwenden: Beenden Sie Ihren Dateinamen mit .csv Ich gebe nicht zu, wie oft ich das vergesse.

    – Docconcoct

    15. August 2021 um 5:20 Uhr

  • Gibt es einen bestimmten Grund, warum wir verwenden to_csv um eine tabulatorgetrennte Datei zu schreiben, außer wenn sie vom OP angefordert wird?

    – DryLabRebel

    12. Januar um 2:16

Benutzer-Avatar
Sayan Sil

Beim Speichern von a DataFrame Objekt in a csv-Datei Verwendung der to_csv Methode, müssen Sie wahrscheinlich nicht speichern vorhergehenden Indizes von jedem die Zeile des DataFrame Objekt.

Du kannst vermeiden dass durch das Bestehen von a False boolescher Wert zu index Parameter.

Etwas wie:

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

Also, wenn Ihr DataFrame-Objekt so etwas ist:

  Color  Number
0   red     22
1  blue     10

Die CSV-Datei speichert:

Color,Number
red,22
blue,10

statt (der Fall, wenn die Standardwert True war vergangen)

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

  • Was ist, wenn die Indizierung gewünscht ist, aber auch einen Titel haben soll? Benutzt du nur df.rename_axis('index_name') ? die Datei selbst wird dadurch nicht verändert

    – Zappen

    27. Mai 2018 um 19:53 Uhr

  • Wie bekomme ich CR / Leerzeile am Ende der Datei? stackoverflow.com/questions/39237755/… Die Antworten auf eine andere Frage haben nicht funktioniert.

    – Carlos Ferreira

    11. Januar um 22:35 Uhr

Benutzer-Avatar
cs95

Um einen Pandas DataFrame in eine CSV-Datei zu schreiben, benötigen Sie DataFrame.to_csv. Diese Funktion bietet viele Argumente mit angemessenen Standardwerten, die Sie in den meisten Fällen überschreiben müssen, um sie an Ihren spezifischen Anwendungsfall anzupassen. Beispielsweise möchten Sie möglicherweise ein anderes Trennzeichen verwenden, das Datetime-Format ändern oder den Index beim Schreiben löschen. to_csv hat Argumente, die Sie übergeben können, um diese Anforderungen zu erfüllen.

In der folgenden Tabelle sind einige gängige Szenarien zum Schreiben in CSV-Dateien und die entsprechenden Argumente aufgeführt, die Sie dafür verwenden können.

Schreiben Sie an CSV ma dude

Fußnoten

  1. Als Standardtrennzeichen wird ein Komma angenommen (','). Ändern Sie dies nicht, es sei denn, Sie wissen, dass Sie dies tun müssen.
  2. Standardmäßig ist der Index von df wird als erste Spalte geschrieben. Wenn Ihr DataFrame keinen Index hat (IOW, the df.index ist die Vorgabe RangeIndex), dann möchten Sie festlegen index=False beim Schreiben. Um dies anders zu erklären: Wenn Ihre Daten einen Index haben, können (und sollten) Sie verwenden index=True oder lass es einfach komplett weg (wie die Voreinstellung ist True).
  3. Es wäre ratsam, diesen Parameter festzulegen, wenn Sie Zeichenfolgendaten schreiben, damit andere Anwendungen wissen, wie sie Ihre Daten lesen sollen. Dadurch wird auch jedes Potenzial vermieden UnicodeEncodeErrors, auf die Sie beim Speichern stoßen könnten.
  4. Die Komprimierung wird empfohlen, wenn Sie große DataFrames (> 100.000 Zeilen) auf die Festplatte schreiben, da dies zu viel kleineren Ausgabedateien führt. OTOH, dies bedeutet, dass sich die Schreibzeit erhöht (und folglich die Lesezeit, da die Datei dekomprimiert werden muss).

Benutzer-Avatar
Hrvoje

Beispiel für Export in Datei mit vollständiger Pfad unter Windows und falls Ihre Datei hat Kopfzeilen:

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

Wenn Sie die Datei beispielsweise in demselben Verzeichnis speichern möchten, in dem sich Ihr Skript befindet, mit utf-8-Kodierung und Tabulator als Trennzeichen:

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

Benutzer-Avatar
Glen Thompson

Etwas anderes, das Sie versuchen können, wenn Sie Probleme mit der Codierung 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 versuche es:

df.to_csv(file_name)

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

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

Warnung: errors=”ignore” lässt einfach das Zeichen weg, z

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

Benutzer-Avatar
Tadhg McDonald-Jensen

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

Benutzer-Avatar
Marc Compte

Wenn die obige Lösung für niemanden funktioniert oder die CSV durcheinander kommt, entfernen Sie sie einfach sep='\t' aus der Zeile so:

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

  • Falls mein Skript auf einem Server ausgeführt wird und ich jedes Mal, wenn es ausgeführt wird, eine neue CSV-Datei erstellen und einen Pfad zum Server angeben muss. wie macht man das und wie löscht man die Datei nach der Erstellung? (erstellen > lesen > löschen ?

    – viki

    3. Dezember 2021 um 20:03 Uhr

  • Ich bin mir nicht sicher, habe praktisch keine Erfahrung damit

    – Shahriar Kabir Khan

    3. Dezember 2021 um 23:59 Uhr

1145300cookie-checkSchreiben eines Pandas DataFrame in eine CSV-Datei

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy