Siehe Pandas: IO-Tools für alle verfügbaren .read_
-Methoden.
Versuchen Sie den folgenden Code, wenn alle CSV-Dateien die gleichen Spalten haben.
Ich habe header=0
hinzugefügt, damit nach dem Lesen der ersten Zeile der CSV-Datei diese als Spaltennamen zugewiesen werden kann.
import pandas as pd
import glob
import os
path = r'C:\DRO\DCL_rawdata_files' # verwenden Sie Ihren Pfad
all_files = glob.glob(os.path.join(path , "/*.csv"))
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
Oder, mit Verweis auf einen Kommentar von Sid.
all_files = glob.glob(os.path.join(path, "*.csv"))
df = pd.concat((pd.read_csv(f) for f in all_files), ignore_index=True)
- Es ist oft notwendig, jede Datenprobe zu identifizieren, was durch Hinzufügen einer neuen Spalte zum DataFrame erreicht werden kann.
pathlib
aus der Standardbibliothek wird für dieses Beispiel verwendet. Es behandelt Pfade als Objekte mit Methoden, anstatt als zu zerlegende Zeichenfolgen.
Imports und Einrichtung
from pathlib import Path
import pandas as pd
import numpy as np
path = r'C:\DRO\DCL_rawdata_files' # oder Unix/Linux/Mac-Pfad
# Holen Sie die Dateien aus dem im OP angegebenen Pfad
files = Path(path).glob('*.csv') # .rglob um Unterverzeichnisse zu erhalten
Option 1:
-
Fügen Sie eine neue Spalte mit dem Dateinamen hinzu
dfs = list()
for f in files:
data = pd.read_csv(f)
.stem ist eine Methode für Pathlib-Objekte, um den Dateinamen ohne Erweiterung zu erhalten
data['file'] = f.stem
dfs.append(data)
df = pd.concat(dfs, ignore_index=True)
Option 2:
-
Fügen Sie eine neue Spalte mit einem generischen Namen unter Verwendung von enumerate
hinzu
dfs = list()
for i, f in enumerate(files):
data = pd.read_csv(f)
data['file'] = f'Datei {i}'
dfs.append(data)
df = pd.concat(dfs, ignore_index=True)
Option 3:
- Erstellen Sie die DataFrames mit einer Listenabstraktion und verwenden Sie dann
np.repeat
, um eine neue Spalte hinzuzufügen.
[f'S{i}' for i in range(len(dfs))]
erstellt eine Liste von Zeichenfolgen, um jedes DataFrame zu benennen.
[len(df) for df in dfs]
erstellt eine Liste von Längen
-
Die Anerkennung für diese Option geht an diese Plotting-Antwort.
Lesen Sie die Dateien in DataFrames ein
dfs = [pd.read_csv(f) for f in files]
Kombinieren Sie die Liste der DataFrames
df = pd.concat(dfs, ignore_index=True)
Fügen Sie eine neue Spalte hinzu
df['Quelle'] = np.repeat([f'S{i}' for i in range(len(dfs))], [len(df) for df in dfs])
Option 4:
-
Einzelformulierungen mit .assign
zur Erstellung der neuen Spalte, mit Anerkennung für einen Kommentar von C8H10N4O2
df = pd.concat((pd.read_csv(f).assign(filename=f.stem) for f in files), ignore_index=True)
oder
df = pd.concat((pd.read_csv(f).assign(Quelle=f'S{i}') for i, f in enumerate(files)), ignore_index=True)