Importieren Sie mehrere CSV-Dateien in Pandas und verketten Sie sie zu einem DataFrame
- Was sind Pandas
-
So lesen Sie einzelne
.csv
-Dateien mit Pandas - Lesen Sie mehrere CSV-Dateien in Python
- Verketten Sie mehrere DataFrames in Python
In diesem Tutorial erfahren Sie, wie Sie mehrere .csv
-Dateien lesen und alle DataFrames zu einem verketten.
In diesem Tutorial werden Pandas verwendet, um die Datendateien zu lesen und die DataFrames zu erstellen und zu kombinieren.
Was sind Pandas
Dieses Paket enthält eine breite Palette von Funktionen zum Lesen einer Vielzahl von Datendateien sowie zum Durchführen von Datenmanipulationstechniken.
Um das Paket pandas
auf Ihrem Computer zu installieren, müssen Sie die Eingabeaufforderung/das Terminal öffnen und pip install pandas
ausführen.
So lesen Sie einzelne .csv
-Dateien mit Pandas
Das Paket pandas
bietet eine Funktion zum Lesen einer .csv
-Datei.
>>> import pandas as pd
>>> df = pd.read_csv(filepath_or_buffer)
Anhand des Dateipfads liest die pandas
-Funktion read_csv()
die Datendatei und gibt das Objekt zurück.
>>> type(df)
<class 'pandas.core.frame.DataFrame'>
Lesen Sie mehrere CSV-Dateien in Python
Es gibt keine explizite Funktion, um diese Aufgabe nur mit dem pandas
-Modul auszuführen. Wir können jedoch eine rationale Methode entwickeln, um das Folgende auszuführen.
Zunächst benötigen wir den Pfad aller Datendateien. Es ist einfach, wenn sich alle Dateien in einem bestimmten Ordner befinden.
Erstellen einer Liste, in der alle Pfade und Namen der Dateien gespeichert werden.
>>> import pandas as pd
>>> import glob
>>> import os
>>> # This is a raw string containing the path of files
>>> path = r'D:\csv files'
>>> all_files = glob.glob(os.path.join(path, '*.csv'))
>>> all_files
['D:\\csv files\\FILE_1.csv', 'D:\\csv files\\FILE_2.csv']
Im obigen Code wird eine Liste erstellt, die den Dateipfad enthält.
glob
-Modul
Verwenden Sie das glob
-Modul, um Dateien oder Pfadnamen zu finden, die einem Muster entsprechen. Der glob
folgt den Standard-Unix-Pfaderweiterungsregeln, um Muster abzugleichen.
Dieses Modul muss nicht extern installiert werden, da es bereits in Python enthalten ist. Wenn Sie dieses Paket jedoch nicht haben, geben Sie pip install glob2
ein, und Sie sollten loslegen können.
Um Pfade rekursiv aus Verzeichnissen/Dateien und Unterverzeichnissen/Unterdateien abzurufen, können wir die Funktionen glob.glob()
und glob.iglob()
des glob
-Moduls verwenden.
Syntax:
glob.glob(pathname, *, recursive=False)
glob.iglob(pathname, *, recursive=False)
Die Funktion gibt eine Liste mit den Pfaden aller Dateien zurück.
Um beispielsweise alle Dateinamen aus einem bestimmten Pfad abzurufen, verwenden Sie das Sternsymbol *
am Ende des Pfads und übergeben es als Zeichenfolge an die Funktion glob.glob('')
.
>>> for files in glob.glob(r'D:\csv files\*'):
print(files)
D:\csv files\FILE_1.csv
D:\csv files\FILE_2.csv
D:\csv files\textFile1.txt
D:\csv files\textFile2.txt
Geben Sie außerdem die Dateierweiterung nach dem Sternchen-Symbol an, um eine gezieltere Suche durchzuführen.
>>> for files in glob.glob(r'D:\csv files\*.csv'):
print(files)
D:\csv files\FILE_1.csv
D:\csv files\FILE_2.csv
Was sind Raw-Strings
In Python wird ein Roh-String gebildet, indem einem Literal-String r
oder R
hinzugefügt wird. Der Backslash (\
) ist ein Literalzeichen in Python-Rohzeichenfolgen.
Dies ist nützlich, wenn wir eine Zeichenfolge mit einem umgekehrten Schrägstrich wünschen, aber nicht möchten, dass sie als Escape-Zeichen betrachtet wird.
Zum Beispiel:
Um Sonderzeichen wie Tabulatoren und Zeilenumbrüche darzustellen, verwenden wir den Backslash (\
), um den Beginn einer Escape-Sequenz anzuzeigen.
>>> print("This\tis\nnormal\tstring")
This is
normal string
Raw-Strings behandeln den Backslash (\
) jedoch als Literalzeichen. Zum Beispiel:
>>> print(r"This\tis\nnormal\tstring")
This\tis\nnormal\tstring
os
-Modul
Das os
-Modul von Python enthält Methoden zum Umgang mit dem Betriebssystem. os
ist in den grundlegenden Utility-Modulen für Python enthalten.
Dieses Modul bietet eine portable Methode zur Nutzung der vom Betriebssystem abhängigen Funktionalität. Das os.path
-Modul von Python, ein Untermodul des os
-Moduls, wird verwendet, um allgemeine Pfadnamen zu manipulieren.
Die Python-Funktion os.path.join()
verbindet auf intelligente Weise eine oder mehrere Pfadkomponenten. Mit Ausnahme der letzten Pfadkomponente verkettet dieser Ansatz verschiedene Pfadkomponenten, indem nach jedem nicht leeren Teil genau ein Verzeichnistrennzeichen ("/")
gesetzt wird.
Am Ende der letzten zu verknüpfenden Pfadkomponente wird ein Verzeichnistrennzeichen ("/")
angefügt ist leer.
Alle zuvor verbundenen Komponenten werden gelöscht, wenn eine Pfadkomponente einen absoluten Pfad darstellt, und das Verbinden geht zu der Komponente über, die den absoluten Pfad darstellt.
Syntax:
os.path.join(path, *path)
Um verschiedene Pfadkomponenten zusammenzuführen, verwenden Sie die Funktion os.path.join()
.
import os
path = "Users"
os.path.join(path, "Desktop", "data.csv")
Ausgang:
'Users\\Desktop\\data.csv'
Verketten Sie mehrere DataFrames in Python
Verwenden Sie im weiteren Verlauf die von der Funktion glob.glob()
zurückgegebenen Pfade, um Daten abzurufen und Datenrahmen zu erstellen. Anschließend werden wir auch die Pandas-Datenrahmenobjekte an die Liste anhängen.
Code:
dataframes = list()
for dfs in all_files:
data = pd.read_csv(dfs)
dataframes.append(data)
Eine Liste von Datenrahmen wird erstellt.
>>> dataframes
[dataframe1, dataframe2]
Verketten der Datenrahmen.
Hinweis: Vor dem Verketten der Datenrahmen müssen alle Datenrahmen ähnliche Spalten haben.
pd.concat(dataframes, ignore_index=True)
Die Methode pandas.concat()
bewältigt alle intensiven Verkettungsoperationen zusammen mit einer Pandas-Objektachse, mit logischen Operationen (Vereinigung oder Schnittmenge) der Indizes auf der anderen Achse als optionales Extra.
Vollständiger Code:
# importing the required modules
import pandas as pd
import os
import glob
# Path of the files
path = r"D:\csv files"
# joining the path and creating list of paths
all_files = glob.glob(os.path.join(path, "*.csv"))
dataframes = list()
# reading the data and appending the dataframe
for dfs in all_files:
data = pd.read_csv(dfs)
dataframes.append(data)
# Concatenating the dataframes
df = pd.concat(dataframes, ignore_index=True)