Pandas df.filter()-Funktion
filter()ist eine Funktion in Pandas, die zum Filtern von Spalten (nicht von Zeilen) verwendet wird. Sie kann bestimmte Spalten anhand von Spaltennamen, Label-Mustern oder regulären Ausdrücken auswählen. Anders alsloc[]undiloc[]andere Funktionen,filter()ist sie speziell für die Spaltenauswahl konzipiert, was sehr nützlich ist, wenn mit Datensätzen mit vielen Spalten gearbeitet wird.
In der Datenanalyse müssen wir uns manchmal nur auf bestimmte Spalten konzentrieren, z. B. nur numerische Spalten auswählen, nur Spalten, die mit einem bestimmten Präfix beginnen, oder nur Spalten, die ein bestimmtes Schlüsselwort enthalten.filter()Für diese Szenarien ist es konzipiert.
Grundlegende Syntax und Parameter
filter()ist eine Methode von DataFrame und Series (für Series wird nur der Parameter items unterstützt), mit der Spalten anhand von Bedingungen gefiltert werden.
Syntaxformat
DataFrame.filter(items=None, like=None, regex=None, axis=None)
Parameterbeschreibung
| Parameter | Type | Erforderlich | Beschreibung | Standardwert |
|---|---|---|---|---|
| items | Liste | Optional | Direkt eine Liste von Spaltennamen angeben, um passende Spalten auszuwählen. | Keine |
| wie | str | Optional | Spaltennamen, die die angegebene Zeichenfolge enthalten; unterstützt Fuzzy-Matching. | Keine |
| regex | str | Optional | Muster für reguläre Ausdrücke zum Abgleichen von Spaltennamen. | Keine |
| axis | int oder str | Optional | Die zu filternde Achse. 0 oder 'index' bedeutet Zeilen, 1 oder 'columns' bedeutet Spalten. | 1 oder 'columns' |
Beschreibung des Rückgabewerts
- Return type: Gibt ein neues DataFrame zurück, das die gefilterten Spalten enthält.
- Column filtering: Standardmäßig,
filter()wirkt es auf Spalten (axis=1). - All rows are retained: Die Filterung betrifft nur Spalten; Zeilendaten bleiben unverändert.
Beispiele
Lassen Sie uns den Umgang mitfilter()ihm anhand zahlreicher Beispiele vollständig meistern.
Beispiel 1: Grundlegende Verwendung – unter Verwendung des items-Parameters
Geben Sie direkt eine Liste von Spaltennamen an, um bestimmte Spalten auszuwählen.
Beispiel
# Beispiel-DataFrame erstellen
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B'],
'city': ['Beijing', 'Shanghai', 'Beijing', 'Guangzhou', 'Shanghai']
}
df = pd.DataFrame(data)
print("Ursprüngliches DataFrame:")
print(df)
print()
# Verwende den items-Parameter, um bestimmte Spalten auszuwählen
print("Wähle die Spalten name und age aus:")
print(df.filter(items=['name', 'age']))
print()
# Wähle eine einzelne Spalte aus (gibt ein DataFrame zurück)
print("Wähle nur die Spalte score aus:")
print(df.filter(items=['score']))
Ausgabe:
原始 DataFrame:
name age score grade city
0 Alice 18 85 A Beijing
1 Bob 19 92 A Shanghai
2 Charlie 17 78 B Beijing
3 David 18 90 A Guangzhou
4 Eve 20 88 B Shanghai
选择 name 和 age 列:
name age
0 Alice 18
1 Bob 19
2 Charlie 17
3 David 18
4 Eve 20
只选择 score 列:
score
0 85
1 92
2 78
3 90
4 88
Code-Erklärung:
filter(items=['name', 'age'])Wählt die angegebenen Spalten aus und gibt ein neues DataFrame zurück, das diese Spalten enthält.- Alle Zeilen bleiben erhalten; nur bestimmte Spalten werden ausgewählt.
- Wenn ein angegebener Spaltenname nicht existiert, wird ein KeyError ausgelöst.
Beispiel 2: Verwendung des like-Parameters - Fuzzy-Matching
likeDer `like`-Parameter ermöglicht es uns, Spalten zu filtern, deren Namen eine angegebene Zeichenfolge enthalten. Dies ist sehr gut für Datensätze mit regelmäßigen Spaltennamen geeignet.
Beispiel
# Erstelle ein DataFrame mit regelmäßigen Spaltennamen
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age_2020': [18, 19, 17, 18, 20],
'age_2021': [19, 20, 18, 19, 21],
'age_2022': [20, 21, 19, 20, 22],
'score_2020': [85, 92, 78, 90, 88],
'score_2021': [87, 94, 80, 92, 90],
'score_2022': [89, 96, 82, 94, 92],
'city': ['Beijing', 'Shanghai', 'Beijing', 'Guangzhou', 'Shanghai']
}
df = pd.DataFrame(data)
print("Ursprüngliches DataFrame:")
print(df)
print()
# Alle Spalten auswählen, die "age" enthalten
print("Spalten, die 'age' enthalten:")
print(df.filter(like='age'))
print()
# Alle Spalten auswählen, die "score" enthalten
print("Spalten, die 'score' enthalten:")
print(df.filter(like='score'))
print()
# Alle Spalten auswählen, die "2021" enthalten
print("Spalten, die '2021' enthalten:")
print(df.filter(like='2021'))
Ausgabe:
原始 DataFrame:
name age_2020 age_2021 age_2022 score_2020 score_2021 score_2022 city
0 Alice 18 19 20 85 87 89 Beijing
1 Bob 19 20 21 92 94 96 Shanghai
2 Charlie 17 18 19 78 80 82 Beijing
3 David 18 19 20 90 92 94 Guangzhou
4 Eve 20 21 22 88 90 92 Shanghai
包含 'age' 的列:
age_2020 age_2021 age_2022
0 18 19 20
1 19 20 21
2 17 18 19
3 18 19 20
4 20 21 22
包含 'score' 的列:
score_2020 score_2021 score_2022
0 85 87 89
1 92 94 96
2 78 80 82
3 90 92 94
4 88 90 92
包含 '2021' 的列:
age_2021 score_2021
0 19 87
1 20 94
2 18 80
3 19 92
4 21 90
Code-Erklärung:
filter(like='age')Wählt alle Spalten aus, deren Namen "age" enthalten.- Fuzzy-Matching erfordert nicht, den vollständigen Spaltennamen zu kennen; geben Sie einfach eine Teilzeichenfolge zum Abgleichen an.
- Dies ist besonders nützlich bei Spalten, die ähnlichen Benennungskonventionen folgen (z. B. nach Jahr organisierte Spalten).
Beispiel 3: Verwendung des regex-Parameters - Übereinstimmung mit regulären Ausdrücken
Für komplexere Anforderungen an die Filterung von Spaltennamen können reguläre Ausdrücke verwendet werden.
Beispiel
# Komplexe Spaltennamen erstellen
data = {
'id': [1, 2, 3, 4, 5],
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age_2020': [18, 19, 17, 18, 20],
'age_2021': [19, 20, 18, 19, 21],
'score_math': [85, 92, 78, 90, 88],
'score_english': [87, 94, 80, 92, 90],
'score_science': [89, 96, 82, 94, 92],
'city': ['Beijing', 'Shanghai', 'Beijing', 'Guangzhou', 'Shanghai']
}
df = pd.DataFrame(data)
print("Spalten des ursprünglichen DataFrame:")
print(df.columns.tolist())
print()
# Spalten auswählen, die mit "score_" beginnen
print("Spalten, die mit 'score_' beginnen:")
print(df.filter(regex='^score_'))
print()
# Spaltennamen auswählen, die Ziffern enthalten
print("Spaltennamen, die Ziffern enthalten:")
print(df.filter(regex='\d')) # \d entspricht Ziffern
print()
# Spalten auswählen, die sowohl "age" als auch "202" enthalten
print("Spalten, die sowohl 'age' als auch '202' enthalten:")
print(df.filter(regex='age.*202|202.*age'))
print()
# Spalten auswählen, die mit einem Buchstaben beginnen und keine Unterstriche enthalten
print("Spalten, die mit einem Buchstaben beginnen und keine Unterstriche enthalten:")
print(df.filter(regex='^[a-zA-Z]+$'))
Ausgabe:
原始 DataFrame 的列:
['id', 'name', 'age_2020', 'age_2021', 'score_math', 'score_english', 'score_science', 'city']
以 'score_' 开头的列:
score_math score_english score_science
0 85 87 89
1 92 94 96
2 78 80 82
3 90 92 94
4 88 90 92
包含数字的列名:
age_2020 age_2021 score_math score_english score_science
0 18 19 85 87 89
1 19 20 92 94 96
2 17 18 78 80 82
3 18 19 90 92 94
4 20 21 88 90 92
包含 'age' 和 '202' 的列:
age_2020 age_2021
0 18 19
1 19 20
2 17 18
3 18 19
4 20 21
以字母开头且不含下划线的列:
name city
0 Alice Beijing
1 Bob Shanghai
2 Charlie Beijing
3 David Guangzhou
4 Eve Shanghai
Code-Erklärung:
filter(regex='^score_')Verwenden Sie^um Spalten abzugleichen, die mit "score_" beginnen.filter(regex='\d')Verwenden Sie\dum Spaltennamen abzugleichen, die Ziffern enthalten.- Reguläre Ausdrücke bieten die größte Flexibilität und können verschiedene komplexe Abgleichanforderungen bewältigen.
Beispiel 4: Verwenden des axis-Parameters zum Filtern von Zeilen
Obwohlfilter()Es wird hauptsächlich für Spalten verwendet, durch denaxisParameter kann es auch zum Filtern von Zeilen verwendet werden.
Beispiel
# DataFrame mit benanntem Index erstellen
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88]
}
df = pd.DataFrame(data, index=['row1', 'row2', 'row3', 'row4', 'row5'])
print("DataFrame mit benanntem Index:")
print(df)
print()
# axis='index' verwenden, um Zeilen zu filtern (mit like)
print("Zeilen, deren Index 'row' enthält:")
print(df.filter(like='row', axis='index'))
print()
# items verwenden, um Zeilen mit bestimmten Indizes zu filtern
print("Zeilen mit Index 'row1' und 'row3':")
print(df.filter(items=['row1', 'row3'], axis='index'))
print()
# Regex zum Filtern von Zeilen verwenden
print("Zeilen, deren Index mit der Regex übereinstimmt (Zeile)
print(df.filter(regex='row[135]', axis='index'))
Ausgabe:
带命名索引的 DataFrame:
name age score
row1 Alice 18 85
row2 Bob 19 92
row3 Charlie 17 78
row4 David 18 90
row5 Eve 20 88
索引包含 'row' 的行:
name age score
row1 Alice 18 85
row2 Bob 19 92
row3 Charlie 17 78
row4 David 18 90
row5 Eve 20 88
索引为 'row1' 和 'row3' 的行:
name age score
row1 Alice 18 85
row3 Charlie 17 78
索引匹配正则表达式(row[135])的行:
name age score
row1 Alice 18 85
row3 Charlie 17 78
row5 Eve 20 88
Code-Erklärung:
axis='index'oderaxis=0Weistfilter()df.filter() an, Zeilenindizes zu filtern.like、items、regexDie Parameter werden beim Filtern von Zeilen genauso verwendet wie beim Filtern von Spalten.- Dies ist sehr nützlich, wenn bestimmte Zeilen anhand von Indexnamen gefiltert werden müssen.
Beispiel 5: Kombination mit anderen Funktionen
filter()Es kann mit anderen Pandas-Funktionen kombiniert werden, um leistungsstarke Möglichkeiten zur Datenauswahl zu erreichen.
Beispiel
import numpy as np
# Ein großes DataFrame erstellen
np.random.seed(42)
df = pd.DataFrame(np.random.randn(5, 10), columns=[
'A', 'B', 'C', 'D', 'E',
'AA', 'BB', 'CC', 'DD', 'EE'
])
print("Spalten des ursprünglichen DataFrame:")
print(df.columns.tolist())
print()
# Spalten mit einzelnen Buchstaben filtern und eine Berechnung durchführen
single_letter_cols = df.filter(regex='^[A-E]$')
print("Mittelwert der Spalten mit einzelnen Buchstaben (A-E):")
print(single_letter_cols.mean())
print()
# Spalten mit zwei Buchstaben filtern und eine Berechnung durchführen
double_letter_cols = df.filter(regex='^[A-E]{2}$')
print("Mittelwert der Spalten mit zwei Buchstaben (AA-EE):")
print(double_letter_cols.mean())
print()
# Zuerst Spalten filtern, dann Zeilen auswählen
print("Erste 3 Zeilen der Spalten mit zwei Buchstaben:")
print(df.filter(regex='^[A-E]{2}$').head(3))
Ausgabe:
原始 DataFrame 的列:
['A', 'B', 'C', 'D', 'E', 'AA', 'BB', 'CC', 'DD', 'EE']
单字母列(A-E)的均值:
A 0.336744
B 0.128223
C -0.234007
D -0.347540
E -0.197939
dtype: float64
双字母列(AA-EE)的均值:
AA 0.530256
BB -0.671336
CC 0.506853
DD -0.443588
EE -0.456486
dtype: float64
双字母列的前 3 行:
AA BB CC DD EE
0 -0.013497 -1.174139 0.214864 1.550698 0.375698
1 -1.368593 0.746580 0.669383 -0.717552 -1.159950
2 0.602619 -1.700736 -0.201647 -0.605166 -0.012750
Code-Erklärung:
filter()Es kann mit anderen DataFrame-Methoden verkettet werden.- Zuerst bestimmte Spalten filtern, dann statistische Berechnungen durchführen, was die Lesbarkeit des Codes verbessert.
- Dies ist besonders nützlich bei der Verarbeitung breiter Tabellen.
Hinweise
items`items` wird verwendet, um Spaltennamen präzise anzugeben, `like` wird für unscharfe Übereinstimmung verwendet und `regex` wird für Übereinstimmung mit regulären Ausdrücken verwendet. Wählen Sie die geeignete Methode entsprechend den tatsächlichen Anforderungen.likeWenn Sie große Datensätze verarbeiten, verwenden Sie zuerstregexum die benötigten Spalten zu filtern, was die Datenmenge für nachfolgende Berechnungen reduzieren und die Leistung verbessern kann.- Standardmäßig wirkt es auf Spalten (axis=1) und kann verwendet werden, um
filter()die Filterrichtung zu ändern. filter()Hinweisaxis='index'oderaxis=0Diese drei Parameter schließen sich gegenseitig aus und können nicht gleichzeitig verwendet werden.- Tipp:
items、like、regexEs ist ein leistungsstarkes Werkzeug für die Verarbeitung breiter Tabellen (Datensätze mit vielen Spalten). Besonders in der Phase der Datenexploration, wenn Sie sich nur auf eine bestimmte Art von Informationen konzentrieren möchten (z. B. alle numerischen Spalten, alle Spalten, die mit einem bestimmten Präfix beginnen), indem Sie es verwenden,
kann die Spaltenfilterung schnell abgeschlossen werden.
filter()Zusammenfassungfilter()Spalten können schnell gefiltert werden.
Zusammenfassung
filter()Es ist eine Funktion in Pandas, die speziell zum Filtern von Spalten (und Zeilen) verwendet wird. Sie bietet drei Filtermethoden: exakte Angabe (items), unscharfe Übereinstimmung (like) und Übereinstimmung mit regulären Ausdrücken (regex).
Die Hauptanwendungsszenarien dieser Funktion umfassen: das Filtern bestimmter Spalten, den Umgang mit Spalten mit regulären Namenskonventionen und die dynamische Auswahl von Spalten für die Analyse. In Kombination mit anderen Pandas-Funktionen kann sie die Datenverarbeitungseffizienz und die Lesbarkeit des Codes erheblich verbessern.
Andere Erweiterungen