Direkt zum Inhalt

Wie man einen Pandas DataFrame in CSV speichert

In Pandas kannst du einen DataFrame mit der Methode df.to_csv('ihr_dateiname.csv', index=False) in eine CSV-Datei speichern, wobei df dein DataFrame ist und index=False verhindert, dass eine Indexspalte hinzugefügt wird.
Aktualisierte 15. Jan. 2025  · 7 Min. Lesezeit

Wenn du einen DataFrame erstellst oder einen bestehenden modifizierst, möchtest du ihn vielleicht exportieren, damit andere Personen damit arbeiten können, oder du kannst ihn für deine zukünftige Arbeit speichern. Es kann zum Beispiel sein, dass du deinem Prüfer eine Vorhersage aus einem maschinellen Lernprojekt vorlegen oder einen geänderten Datensatz an einen Kollegen schicken musst.

In Python kannst du einen DataFrame mit der Methode .to_csv() von Pandas als CSV-Datei exportieren .

In diesem Artikel führe ich dich durch die wichtigsten Schritte des Prozesses und erkläre die Parameter der Methode.

Wenn du mehr über Pandas erfahren möchtest, schau dir diesen Kurs an Datenbearbeitung mit Pandas.

Ich beginne mit einer kurzen Antwort für diejenigen, die es eilig haben, und gehe dann ins Detail.

Kurze Antwort: Pandas DataFrame im CSV-Format speichern

Um einen Pandas DataFrame als CSV-Datei zu speichern, verwendest du die Methode DataFrame.to_csv()

df.to_csv('your_file_name.csv', index=False)

Ersetze 'your_file_name.csv' durch den gewünschten Namen und Pfad für deine Datei. Das Argument index=False verhindert, dass Pandas eine Indexspalte zu deiner CSV hinzufügt.

Einen Pandas DataFrame erstellen

Schauen wir uns jetzt die längere Antwort an. Anstatt einen DataFrame von Grund auf neu zu erstellen, importiere ich einen Datensatz, ändere ihn und speichere den resultierenden DataFrame im CSV-Format. Der erste Schritt besteht darin, die notwendigen Bibliotheken zu importieren:

import pandas as pd
import seaborn as sns
from sklearn.preprocessing import MinMaxScaler

Dann können wir einen seaborn -Datensatz importieren. Der importierte Datensatz ist bereits ein Pandas DataFrame, wir müssen ihn also nicht umwandeln.

# We’ll import the 'titanic' dataset from seaborn
df = sns.load_dataset('titanic')
print(df.head())
survived  pclass     sex   age  sibsp  parch     fare embarked  class  
0         0       3    male  22.0      1      0   7.2500        S  Third   
1         1       1  female  38.0      1      0  71.2833        C  First   
2         1       3  female  26.0      0      0   7.9250        S  Third   
3         1       1  female  35.0      1      0  53.1000        S  First   
4         0       3    male  35.0      0      0   8.0500        S  Third 
    who  adult_male deck  embark_town alive  alone  
0    man        True  NaN  Southampton    no  False  
1  woman       False    C    Cherbourg   yes  False  
2  woman       False  NaN  Southampton   yes   True  
3  woman       False    C  Southampton   yes  False  
4    man        True  NaN  Southampton    no   True  

Ändern eines Pandas DataFrame

Nun wollen wir einen neuen DataFrame erstellen. Da ich dieMethode .to_csv() von Pandas erkunden möchte, werde ich nur eine Min-Max-Normalisierung für numerische Variablen durchführen.

scaler = MinMaxScaler()
# Choose the columns that have integer or float data-types                                           
numerical columns - df.select_dtypes(include=['float64','int64']).columns
new_df = df.copy()
# The min-max scaler will represent all numbers on a 0-to-1 scale
new_df[numerical_columns] = scaler.fit_transform(df[numerical_columns])
print(new_df.head())
survived  pclass     sex       age  sibsp  parch      fare embarked    
0       0.0     1.0    male  0.271174  0.125    0.0  0.014151        S  
1       1.0     0.0  female  0.472229  0.125    0.0  0.139136        C  
2       1.0     1.0  female  0.321438  0.000    0.0  0.015469        S  
3       1.0     0.0  female  0.434531  0.125    0.0  0.103644        S  
4       0.0     1.0    male  0.434531  0.000    0.0  0.015713        S  
class   who  adult_male deck  embark_town alive  alone  
Third   man        True  NaN  Southampton    no  False  
First   woman      False   C    Cherbourg   yes  False  
Third   woman      False NaN  Southampton   yes   True  
First   woman      False   C  Southampton   yes  False  
Third   man        True  NaN  Southampton    no   True  

Einen Pandas DataFrame als CSV speichern

Wir verwenden die Methode DataFrame.to_csv(), um den geänderten DataFrame als CSV-Datei zu speichern.

new_df.to_csv('new_titanic.csv') 

Dadurch wird die CSV-Datei im aktuellen Verzeichnis gespeichert. Wenn du eine Auffrischung brauchst, lies dieses Tutorial darüber wie man das aktuelle Verzeichnis in Python ermittelt.

Die Art und Weise, wie ich diese Methode aufgerufen habe, stellte sicher, dass alle Parameter auf ihre Standardwerte gesetzt wurden. Jetzt stelle ich dir die Parameter vor und zeige dir, wie du ihre Werte nach deinen Bedürfnissen ändern kannst.

Parameter von DataFrame.to_csv() Erläutert

Hier ist die gleiche Methode .to_csv() mit allen Parametern aufgeführt:

new_df.to_csv(
    path_or_buf='new_titanic.csv',
    sep=',',
    na_rep='',
    float_format=None,
    columns=[],
    header=True,
    index=True,
    index_label=None,
    mode='w',
    encoding='utf-8',
    quoting=csv.QUOTE_MINIMAL,
    lineterminator=os.linesep,
    storage_options={},
    compression='infer',
    quotechar='',
    chunksize=None,
    date_format=None,
    doublequote=True,
    escapechar=None,
    decimal='.',
    errors='strict'
)

Einige dieser Parameter sind optional, wie z.B. columns, encoding, quoting, lineterminator und storage_options, also setze ich nur Werte für sie, nicht unbedingt Standardwerte.

Der erste Parameter kann entweder ein String sein, der den Namen der Datei angibt, oder ein Dateiobjekt. Schau dir dieses Beispiel an:

with open('new_titanic.csv',  'w', encoding = 'utf=8') as file:
     new_df.to_csv(file)

Trennzeichen und fehlende Werte

Der nächste Parameter ist das Trennzeichen, das angibt, wie die Daten getrennt werden. Das Standard-Trennzeichen ist das Komma, aber wir können es in einen Tab oder ein Semikolon ändern. Ein Tabulator oder Semikolon als Trennzeichen kann nützlich sein, wenn deine exportierten Daten ein bestimmtes Format haben müssen. Auch bei Daten, die Kommas enthalten, wie z.B. bei Texten, kann die Verwendung des Kommas als Trennzeichen zu unerwünschten Änderungen führen.

Wenn du zum Beispiel "Hallo, Welt "als Datenpunkt hast , brauchst du, wenn du das Komma als Trennzeichen verwenden willst, auch Anführungszeichen, damit es ein einzelner Datenpunkt bleibt. Die Verwendung eines Tabulators oder Semikolons als Trennzeichen kann die bessere Option sein, da es weniger Speicherplatz benötigt als die Verwendung von Kommas und Anführungszeichen.

new_df.to_csv('new_titanic.csv', sep = '\t')
new_df_tab = pd.read_csv('new_titanic.csv')
0\t0\t3\tmale\t22.0\t1\t0\t7.25\tS\tThird\tman...                                                                 
1\t1\t1\tfemale\t38.0\t1\t0\t71.2833\tC\tFirst...                                                                 
2\t1\t3\tfemale\t26.0\t0\t0\t7.925\tS\tThird\t...                                                                 
3\t1\t1\tfemale\t35.0\t1\t0\t53.1\tS\tFirst\tw...                                                                 
4\t0\t3\tmale\t35.0\t0\t0\t8.05\tS\tThird\tman... 

Der dritte Parameter, na_rep, bezieht sich auf die Darstellung der fehlenden Werte. Üblicherweise lässt du die Zelle leer und fügst ‘NaN’ oder ‘Na’ ein, aber du kannst auch deine eigene Zeichenfolge einfügen. Im folgenden Beispiel werde ich für jeden fehlenden Wert ‘Datacamp’ einfügen.

new_df.to_csv('new_titanic.csv', na_rep='Datacamp')
new_df_datacamp = pd.read_csv('new_titanic.csv') 
new_df_datacamp = pd.DataFrame(new_df_datacamp) 
#find the missing values
missing_values = new_df_datacamp.isnull().sum()
print(missing_values)
survived         0
pclass           0
sex              0
age            177
sibsp            0
parch            0
fare             0
embarked         2
class            0
who              0
adult_male       0
deck           688
embark_town      2
alive            0
alone            0

Umgang mit Spalten und Indizes

Schauen wir uns an, wie die fehlenden Werte in der Spalte age dargestellt werden:

print(new_df_datacamp['age'][:10])
     0.2711736617240512
     0.4722292033174164
    0.32143754712239253
     0.4345312892686604
     0.4345312892686604
               Datacamp
     0.6732847449107816
    0.01985423473234481
    0.33400351847197784
    0.17064589092736868

Wenn du weniger Nachkommastellen möchtest, gibst du mit dem Parameter float_format die Anzahl der Nachkommastellen an. Hier werden wir nur drei verwenden.

new_df.to_csv('new_titanic.csv', na_rep='Datacamp', float_format='%.3f')
new_df_datacamp = pd.read_csv('new_titanic.csv')
new_df_datacamp = pd.DataFrame(new_df_datacamp)
print(new_df_datacamp['age'][:10])
0.271
0.472
0.321
0.435
0.435
Datacamp
0.673
0.020
0.334
0.171

Wenn du nicht willst sehen willst, setze den Parameter index auf False.

Du kannst auch entscheiden, ob die Spaltennamen beibehalten werden sollen, indem du den Parameter header verwendest und ihn auf True oder False setzt (oder du kannst die Namen für die Spalten festlegen).

Mit dem Parameter columns kannst du auswählen, welche Spalten beibehalten werden sollen. Mit dem Parameter index_label kannst du einen Namen für den Spaltenindex festlegen oder eine Liste von Namen, wenn du mehrere Indizes hast.

new_df.to_csv(
    'new_titanic.csv', 
    index=True, 
    header=True, 
    columns=['age', 'alive'], 
    index_label='Index'
)
new_df = pd.read_csv('new_titanic.csv')
new_df = pd.DataFrame(new_df)
print(new_df.head())
  Index       age alive
      0  0.271174    no
      1  0.472229   yes
      2  0.321438   yes
      3  0.434531   yes
      4  0.434531    no

Öffnen, Kodieren und Komprimieren von Dateien

Mit dem Parameter mode kannst du festlegen, was geschehen soll, wenn du bereits eine CSV-Datei mit demselben Namen wie die von dir erstellte Datei hast. Wenn du den Parameter auf ‘w’ setzt und bereits eine new_titanic.csv Datei hast, wird die von dir erstellte Datei die alte ersetzen. Wenn du ‘x’ einstellst, wird die neue Datei nur erstellt, wenn es keine bestehende Datei mit demselben Namen gibt. Wenn du schließlich den Parameter auf ‘a’ setzt, wird die neue Datei an die ältere Datei mit demselben Namen angehängt (vielleicht willst du nur ein paar Zeilen hinzufügen).

Der Parameter encoding legt die Kodierung der neuen Datei fest. Wenn deine Daten Sonderzeichen enthalten, z. B. Buchstaben eines anderen Alphabets, kannst du sie auf ‘utf-8’ oder eine andere Kodierung einstellen.

Der Parameter compression legt fest, wie die neue Datei komprimiert wird. Standardmäßig ist sie auf ‘infer’ eingestellt, was bedeutet, dass die Datei entsprechend der angegebenen Erweiterung komprimiert wird, aber du kannst auch deine bevorzugte Erweiterung angeben.

# Infer the compression
new_df.to_csv('new_titanic.csv.gz')
# Specify the compression explicitly
new_df.to_csv('new_data.csv.gz', compression='gzip')
# Specify the compression via a dictionary
new_df.to_csv(
    'new_data.zip', 
    compression={
        'method': 'zip', 
        'archive_name': 'data.csv'
    }
)

Wie man Quotierungen verwendet

Der Parameter quoting legt die Art der Daten fest, die zwischen Anführungszeichen gesetzt werden sollen. Wie ich bereits sagte, musst du bei einem Komma-Trennzeichen und Zellen, die Kommas enthalten (z. B. Texte), entscheiden, was zwischen Anführungszeichen gesetzt werden soll.

# Default value, quotes only fields with special characters or separators like tabs and commas
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_MINIMAL)
# Quotes all fields
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_ALL)
# Quotes only fields with non-numeric values
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_NONNUMERIC)
# No field is quoted
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_NONE)

Chunksize und Datums-Zeit-Daten

Der Parameter chunksize gibt an, wie viel von deiner Datei auf einmal geschrieben werden soll. Wenn du den Standardwert angibst, werden alle Zeilen auf einmal geschrieben, aber du kannst auch eine Anzahl angeben, was nützlich sein kann, wenn die Datei sehr groß ist.

Der Parameter date_format legt die Darstellung von Datetime-Objekten fest. Du kannst sie mit demstrftime-Format angeben.

# Write DataFrame to CSV with dates formatted as 'MM/DD/YYYY'
new_df.to_csv('new_titanic.csv', date_format='%m/%d/%Y')
# You can set datetime objects up to seconds
new_df.to_csv('new_titanic.csv', date_format='%Y-%m-%d %H:%M:%S')

Fazit

Jetzt kannst du deinen DataFrame hoffentlich in dem Format exportieren, das deinen Bedürfnissen entspricht!

Ich möchte dich ermutigen, weiter zu lernen - hier sind einige Ressourcen, die du ausprobieren kannst:


Tudor Mărginean's photo
Author
Tudor Mărginean

Ich schließe meinen Master in Datenwissenschaften an der Universität Bukarest, Rumänien, mit einer Arbeit über die Vorhersage von Verkehrsströmen mit verschiedenen Modellen auf der Grundlage von Graph Neural Networks ab. Die wichtigsten Fähigkeiten, die ich gelernt habe, waren die Datenbereinigung und -visualisierung in Python und Power BI, die Vorverarbeitung für verschiedene Machine-Learning-Aufgaben und die Erstellung von Modellen mit PyTorch (oder TensorFlow). Gleichzeitig unterrichte ich als Doktorand der Philosophie Seminare zur Logik erster Ordnung und arbeite an meiner Doktorarbeit über die Bayes'sche Bestätigungstheorie. Ich bin begierig darauf, mehr über Daten und die Erstellung von Modellen zu lernen und das Gelernte weiterzugeben.

Themen

Lerne Pandas mit diesen Kursen!

Zertifizierung verfügbar

Kurs

Datenbearbeitung mit Pandas

4 hr
413.5K
Lerne, wie du Daten importierst und bereinigst, Statistiken berechnest und Visualisierungen mit Pandas erstellst.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow