Kurs
Wie man einen Pandas DataFrame in CSV speichert
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:

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.
Lerne Pandas mit diesen Kursen!
Kurs
Daten mit Pandas umgestalten
Kurs