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

11voto

Yury Wallet Punkte 1214

Es könnte sein, dass dies nicht die Antwort für diesen Fall ist, aber da ich die gleiche Fehlermeldung mit .to_csv Ich habe versucht .toCSV('name.csv') und die Fehlermeldung war anders (" SparseDataFrame' object has no attribute 'toCSV' ). Das Problem wurde also gelöst, indem der Datenrahmen in einen dichten Datenrahmen umgewandelt wurde

df.to_dense().to_csv("submission.csv", index = False, sep=',', encoding='utf-8')

4voto

Ich würde die Verwendung der '\t' getrennt und würde beim erneuten Lesen des Datensatzes Probleme verursachen.

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

2voto

not a robot Punkte 3525

1. errors= ist manchmal nützlich

Wenn eine Datei eine bestimmte Kodierung haben muss, der vorhandene Datenrahmen aber Zeichen enthält, die nicht dargestellt werden können, errors= kann verwendet werden, um " Kosten des Informationsverlustes . Alle möglichen Werte, die als Parameter übergeben werden können errors= Argument an die open() Funktion in Python kann hier übergeben werden.

Der folgende Code speichert zum Beispiel eine csv-Datei mit Ascii-Kodierung, bei der die japanischen Zeichen durch ein ? .

df = pd.DataFrame({'A': ['Shohei Ohtani ']})
df.to_csv('data1.csv', encoding='ascii', errors='replace', index=False)

print(pd.read_csv('data1.csv'))

                           A
0  Shohei Ohtani ???????????

2. float_format= ist manchmal nützlich

Sie können Float-D-Typen formatieren mit float_format= und das spart manchmal eine Menge Speicherplatz bei die Kosten für den Verlust von Präzision . Zum Beispiel,

df = pd.DataFrame({'A': [*range(1,9,3)]*1000})/3
df.to_csv('data1.csv', index=False)                       # 61,440 bytes on disk
df.to_csv('data2.csv', index=False, float_format='%.2f')  # 20,480 bytes on disk

3. Speichern Sie eine komprimierte csv-Datei

Seit Pandas 1.0.0 können Sie der Komprimierung ein Diktat übergeben, das die Komprimierungsmethode und den Dateinamen innerhalb des Archivs angibt. Der folgende Code erstellt eine Zip-Datei mit dem Namen compressed_data.zip die eine einzige Datei mit dem Namen data.csv .

df.to_csv('compressed_data.zip', index=False, compression={'method': 'zip', 'archive_name': 'data.csv'})
# read the archived file as a csv
pd.read_csv('compressed_data.zip')

Sie können sogar ein bestehendes Archiv ergänzen; übergeben Sie einfach mode='a' .

df.to_csv('compressed_data.zip', compression={'method': 'zip', 'archive_name': 'data_new.csv'}, mode='a')

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