Schleifen über Datensätze
Zuletzt aktualisiert am 2025-10-31 | Diese Seite bearbeiten
Übersicht
Fragen
- Wie kann ich viele Datensätze mit einem einzigen Befehl verarbeiten?
Ziele
- In der Lage sein, Globbing-Ausdrücke zu lesen und zu schreiben, die mit Dateimengen übereinstimmen.
- Verwenden Sie glob, um Listen von Dateien zu erstellen.
- Schreibe for-Schleifen, um Operationen auf Dateien durchzuführen, deren Namen in einer Liste angegeben sind.
Verwenden Sie eine for-Schleife, um Dateien mit einer
Liste ihrer Namen zu verarbeiten.
- Ein Dateiname ist eine Zeichenkette.
- Und Listen können Zeichenketten enthalten.
PYTHON
import pandas as pd
for filename in ['data/gapminder_gdp_africa.csv', 'data/gapminder_gdp_asia.csv']:
data = pd.read_csv(filename, index_col='country')
print(filename, data.min())
AUSGABE
data/gapminder_gdp_africa.csv gdpPercap_1952 298.846212
gdpPercap_1957 335.997115
gdpPercap_1962 355.203227
gdpPercap_1967 412.977514
⋮ ⋮ ⋮
gdpPercap_1997 312.188423
gdpPercap_2002 241.165877
gdpPercap_2007 277.551859
dtype: float64
data/gapminder_gdp_asia.csv gdpPercap_1952 331
gdpPercap_1957 350
gdpPercap_1962 388
gdpPercap_1967 349
⋮ ⋮ ⋮
gdpPercap_1997 415
gdpPercap_2002 611
gdpPercap_2007 944
dtype: float64
Verwenden Sie glob.glob,
um Gruppen von Dateien zu finden, deren Namen einem Muster
entsprechen.
- In Unix bedeutet der Begriff “globbing” “eine Menge von Dateien mit einem Muster abgleichen”.
- Die häufigsten Muster sind:
-
*bedeutet “entspricht null oder mehr Zeichen” -
?bedeutet “genau ein Zeichen übereinstimmen”
-
- Die Standardbibliothek von Python enthält das Modul
glob, um die Funktionalität des Mustervergleichs bereitzustellen - Das
globModul enthält eine Funktion, die auchglobgenannt wird, um Dateimuster zu finden - Z.B. passt
glob.glob('*.txt')auf alle Dateien im aktuellen Verzeichnis, deren Namen mit.txtenden. - Das Ergebnis ist eine (möglicherweise leere) Liste von Zeichenketten.
AUSGABE
all csv files in data directory: ['data/gapminder_all.csv', 'data/gapminder_gdp_africa.csv', \
'data/gapminder_gdp_americas.csv', 'data/gapminder_gdp_asia.csv', 'data/gapminder_gdp_europe.csv', \
'data/gapminder_gdp_oceania.csv']
AUSGABE
all PDB files: []
Verwenden Sie glob und for, um Stapel von
Dateien zu verarbeiten.
- Es hilft sehr, wenn die Dateien systematisch und konsistent benannt und gespeichert werden, damit einfache Muster die richtigen Daten finden.
PYTHON
for filename in glob.glob('data/gapminder_*.csv'):
data = pd.read_csv(filename)
print(filename, data['gdpPercap_1952'].min())
AUSGABE
data/gapminder_all.csv 298.8462121
data/gapminder_gdp_africa.csv 298.8462121
data/gapminder_gdp_americas.csv 1397.717137
data/gapminder_gdp_asia.csv 331.0
data/gapminder_gdp_europe.csv 973.5331948
data/gapminder_gdp_oceania.csv 10039.59564
- Dies beinhaltet alle Daten, sowie Daten pro Region.
- Verwenden Sie ein spezifischeres Muster in den Übungen, um den gesamten Datensatz auszuschließen.
- Aber beachten Sie, dass das Minimum des gesamten Datensatzes auch das Minimum eines der Datensätze ist, was eine nette Überprüfung der Korrektheit ist.
Ermitteln von Übereinstimmungen
Auf welche dieser Dateien trifft der Ausdruck
glob.glob('data/*as*.csv') nicht zu?
data/gapminder_gdp_africa.csvdata/gapminder_gdp_americas.csvdata/gapminder_gdp_asia.csv
1 wird vom glob nicht gefunden.
Minimale Dateigröße
Ändern Sie dieses Programm so, dass es die Anzahl der Datensätze in der Datei mit den wenigsten Datensätzen ausgibt.
PYTHON
import glob
import pandas as pd
fewest = ____
for filename in glob.glob('data/*.csv'):
dataframe = pd.____(filename)
fewest = min(____, dataframe.shape[0])
print('smallest file has', fewest, 'records')
Beachten Sie, dass die Methode
DataFrame.shape() ein Tupel mit der Anzahl der Zeilen
und Spalten des Datenrahmens zurückgibt.
PYTHON
import glob
import pandas as pd
fewest = float('Inf')
for filename in glob.glob('data/*.csv'):
dataframe = pd.read_csv(filename)
fewest = min(fewest, dataframe.shape[0])
print('smallest file has', fewest, 'records')
Sie könnten sich dafür entschieden haben, die Variable
fewest mit einer Zahl zu initialisieren, die größer ist als
die Zahlen, mit denen Sie arbeiten, aber das könnte zu Problemen führen,
wenn Sie den Code mit größeren Zahlen wiederverwenden. In Python können
Sie positive Unendlichkeit verwenden, was unabhängig von der Größe Ihrer
Zahlen funktioniert. Welche anderen speziellen Zeichenketten erkennt die
Funktion
float?
Vergleich von Daten
Schreiben Sie ein Programm, das die regionalen Datensätze einliest und das durchschnittliche Pro-Kopf-BIP für jede Region über die Zeit in einem einzigen Diagramm darstellt. Pandas gibt eine Fehlermeldung aus, wenn es auf nicht-numerische Spalten in einer Datenrahmenberechnung stößt. Sie müssen also entweder diese Spalten herausfiltern oder Pandas anweisen, sie zu ignorieren.
Diese Lösung erstellt eine nützliche Legende, indem sie die string
split method verwendet, um die region aus
dem Pfad ‘data/gapminder_gdp_a_specific_region.csv’ zu extrahieren.
PYTHON
import glob
import pandas as pd
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1,1)
for filename in glob.glob('data/gapminder_gdp*.csv'):
dataframe = pd.read_csv(filename)
# Extrahieren Sie <Region> aus dem Dateinamen, der voraussichtlich das Format „data/gapminder_gdp_<Region>.csv” hat.
# Wir teilen die Zeichenfolge mit der Split-Methode und „_” als Trennzeichen,
# rufen die letzte Zeichenfolge in der Liste ab, die Split zurückgibt („<Region>.csv”),
# und entfernen dann die Erweiterung „.csv” aus dieser Zeichenfolge.
# HINWEIS: Das im nächsten Callout behandelte Modul „pathlib” bietet ebenfalls
# praktische Abstraktionen für die Arbeit mit Dateisystempfaden und könnte dies ebenfalls lösen:
# from pathlib import Path
# region = Path(filename).stem.split(‚_‘)[-1]
region = filename.split('_')[-1][:-4]
# Extrahieren Sie die Jahreszahlen aus den Spalten des Datenrahmens.
headings = dataframe.columns[1:]
years = headings.str.split('_').str.get(1)
# pandas gibt Fehler aus, wenn es bei der Berechnung eines Datenrahmens auf nicht numerische Spalten stößt.
# Wir können pandas jedoch mit dem Parameter „numeric_only” anweisen, diese zu ignorieren.
dataframe.mean(numeric_only=True).plot(ax=ax, label=region)
# HINWEIS: Eine andere Möglichkeit besteht darin, mithilfe der Filtermethode nur die Spalten auszuwählen, deren Name „gdp” enthält.
# dataframe.filter(like=„gdp“).mean().plot(ax=ax, label=region)
# Titel und Beschriftungen festlegen
ax.set_title('GDP Per Capita for Regions Over Time')
ax.set_xticks(range(len(years)))
ax.set_xticklabels(years)
ax.set_xlabel('Year')
plt.tight_layout()
plt.legend()
plt.show()
Umgang mit Dateipfaden
Das Modul
pathlib bietet nützliche Abstraktionen für die Datei-
und Pfadmanipulation, wie z.B. die Rückgabe des Namens einer Datei ohne
die Dateierweiterung. Dies ist sehr nützlich, wenn man eine Schleife
über Dateien und Verzeichnisse zieht. Im folgenden Beispiel erstellen
wir ein Objekt Path und untersuchen seine Attribute.
PYTHON
from pathlib import Path
p = Path("data/gapminder_gdp_africa.csv")
print(p.parent)
print(p.stem)
print(p.suffix)
AUSGABE
data
gapminder_gdp_africa
.csv
Hinweis: Überprüfen Sie alle verfügbaren Attribute
und Methoden des Objekts Path mit der Funktion
dir().
- Verwenden Sie eine
for-Schleife, um Dateien mit einer Liste von Namen zu verarbeiten. - Verwenden Sie
glob.glob, um Gruppen von Dateien zu finden, deren Namen einem Muster entsprechen. - Verwenden Sie
globundfor, um Stapel von Dateien zu verarbeiten.