Pandas df.filter()-Funktion

Pandas Häufige Funktionen


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

import pandas as pd

# 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:

  1. filter(items=['name', 'age'])Wählt die angegebenen Spalten aus und gibt ein neues DataFrame zurück, das diese Spalten enthält.
  2. Alle Zeilen bleiben erhalten; nur bestimmte Spalten werden ausgewählt.
  3. 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

import pandas as pd

# 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

import pandas as pd

# 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:

  1. filter(regex='^score_')Verwenden Sie^um Spalten abzugleichen, die mit "score_" beginnen.
  2. filter(regex='\d')Verwenden Sie\dum Spaltennamen abzugleichen, die Ziffern enthalten.
  3. 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

import pandas as pd

# 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 pandas as pd
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, umfilter()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.

Pandas Häufige Funktionen

Andere Erweiterungen