Fonction Pandas df.filter()
filter()est une fonction de Pandas utilisée pour filtrer les colonnes (plutôt que les lignes). Elle peut sélectionner des colonnes spécifiques en fonction des noms de colonnes, des motifs d'étiquettes ou des expressions régulières. Différente desloc[]etiloc[]autres fonctions,filter()elle est spécifiquement conçue pour la sélection de colonnes, ce qui est très utile lorsqu'on manipule des ensembles de données comportant de nombreuses colonnes.
Dans l'analyse de données, nous devons parfois nous concentrer uniquement sur des colonnes spécifiques, par exemple en sélectionnant uniquement les colonnes numériques, uniquement les colonnes commençant par un préfixe spécifique, ou uniquement les colonnes contenant un mot-clé spécifique.filter()Elle est conçue pour ces scénarios.
Syntaxe de base et paramètres
filter()est une méthode de DataFrame et Series (pour Series, seul le paramètre items est pris en charge), utilisée pour filtrer les colonnes en fonction de conditions.
Format de syntaxe
DataFrame.filter(items=None, like=None, regex=None, axis=None)
Description des paramètres
| Paramètre | Type | Requis | Description | Valeur par défaut |
|---|---|---|---|---|
| items | liste | Optional | Spécifier directement une liste de noms de colonnes pour sélectionner les colonnes correspondantes. | Aucune |
| comme | str | Optional | Noms de colonnes contenant la chaîne spécifiée ; prend en charge la correspondance floue. | Aucune |
| regex | str | Optional | Motif d'expression régulière pour correspondre aux noms de colonnes. | Aucune |
| axis | int ou str | Optional | L'axe à filtrer. 0 ou 'index' désigne les lignes, 1 ou 'columns' désigne les colonnes. | 1 ou 'columns' |
Description de la valeur de retour
- Type de retour: Renvoie un nouveau DataFrame contenant les colonnes filtrées.
- Filtrage des colonnes: Par défaut,
filter()il agit sur les colonnes (axis=1). - Toutes les lignes sont conservées: Le filtrage n'affecte que les colonnes ; les données des lignes restent inchangées.
Exemples
Maîtrisons pleinement l'utilisation defilter()celui-ci à travers de riches exemples.
Exemple 1 : Utilisation de base - utilisation du paramètre items
Spécifiez directement une liste de noms de colonnes pour sélectionner des colonnes spécifiques.
Exemple
# Créer un DataFrame d'exemple
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("DataFrame d'origine :")
print(df)
print()
# Utilisez le paramètre items pour sélectionner des colonnes spécifiques
print("Sélectionnez les colonnes name et age :")
print(df.filter(items=['name', 'age']))
print()
# Sélectionner une seule colonne (renvoie un DataFrame)
print("Sélectionnez uniquement la colonne score :")
print(df.filter(items=['score']))
Sortie :
原始 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
Explication du code :
filter(items=['name', 'age'])Sélectionne les colonnes spécifiées et renvoie un nouveau DataFrame contenant ces colonnes.- Toutes les lignes sont conservées ; seules des colonnes spécifiques sont sélectionnées.
- Si un nom de colonne spécifié n'existe pas, une KeyError est levée.
Exemple 2 : Utilisation du paramètre like - correspondance floue
likeLe paramètre `like` nous permet de filtrer les colonnes dont les noms contiennent une chaîne spécifiée. Cela convient très bien aux jeux de données dont les noms de colonnes sont réguliers.
Exemple
# Créer un DataFrame avec des noms de colonnes réguliers
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("DataFrame d'origine :")
print(df)
print()
# Sélectionner toutes les colonnes contenant "age"
print("Colonnes contenant 'age' :")
print(df.filter(like='age'))
print()
# Sélectionner toutes les colonnes contenant "score"
print("Colonnes contenant 'score' :")
print(df.filter(like='score'))
print()
# Sélectionner toutes les colonnes contenant "2021"
print("Colonnes contenant '2021' :")
print(df.filter(like='2021'))
Sortie :
原始 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
Explication du code :
filter(like='age')Sélectionne toutes les colonnes dont les noms contiennent "age".- La correspondance floue ne nécessite pas de connaître le nom complet de la colonne ; il suffit de fournir une chaîne de correspondance partielle.
- C'est particulièrement utile lorsqu'on traite des colonnes qui suivent des conventions de nommage similaires (par exemple, des colonnes organisées par année).
Exemple 3 : Utilisation du paramètre regex - correspondance d'expressions régulières
Pour des besoins de filtrage de noms de colonnes plus complexes, des expressions régulières peuvent être utilisées.
Exemple
# Créer des noms de colonnes complexes
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("Colonnes du DataFrame d'origine :")
print(df.columns.tolist())
print()
# Sélectionner les colonnes commençant par "score_"
print("Colonnes commençant par 'score_' :")
print(df.filter(regex='^score_'))
print()
# Sélectionner les noms de colonnes contenant des chiffres
print("Noms de colonnes contenant des chiffres :")
print(df.filter(regex='\d')) # \d correspond à des chiffres
print()
# Sélectionner les colonnes contenant à la fois "age" et "202"
print("Colonnes contenant à la fois 'age' et '202' :")
print(df.filter(regex='age.*202|202.*age'))
print()
# Sélectionner les colonnes commençant par une lettre et ne contenant pas de tirets bas
print("Colonnes commençant par une lettre et sans tirets bas :")
print(df.filter(regex='^[a-zA-Z]+$'))
Sortie :
原始 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
Explication du code :
filter(regex='^score_')Utiliser^pour faire correspondre les colonnes commençant par "score_".filter(regex='\d')Utiliser\dpour faire correspondre les noms de colonnes contenant des chiffres.- Les expressions régulières offrent la plus grande flexibilité et peuvent gérer divers besoins de correspondance complexes.
Exemple 4 : Utilisation du paramètre axis pour filtrer les lignes
Bien quefilter()il est principalement utilisé pour les colonnes, via leaxisparamètre, il peut aussi être utilisé pour filtrer les lignes.
Exemple
# Créer un DataFrame avec un index nommé
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 avec index nommé :")
print(df)
print()
# Utiliser axis='index' pour filtrer les lignes (en utilisant like)
print("Lignes dont l'index contient 'row' :")
print(df.filter(like='row', axis='index'))
print()
# Utiliser items pour filtrer les lignes avec des indices spécifiques
print("Lignes avec l'index 'row1' et 'row3' :")
print(df.filter(items=['row1', 'row3'], axis='index'))
print()
# Utiliser une regex pour filtrer les lignes
print("Lignes dont l'index correspond à la regex (ligne)
print(df.filter(regex='row[135]', axis='index'))
Sortie :
带命名索引的 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
Explication du code :
axis='index'ouaxis=0Indiquefilter()df.filter() pour filtrer les indices de lignes.like、items、regexLes paramètres ont le même usage dans le filtrage des lignes que dans le filtrage des colonnes.- Ceci est très utile lorsque vous devez filtrer des lignes spécifiques en fonction des noms d'index.
Exemple 5 : Combinaison avec d'autres fonctions
filter()Il peut être combiné avec d'autres fonctions Pandas pour obtenir de puissantes capacités de sélection de données.
Exemple
import numpy as np
# Créer un grand DataFrame
np.random.seed(42)
df = pd.DataFrame(np.random.randn(5, 10), columns=[
'A', 'B', 'C', 'D', 'E',
'AA', 'BB', 'CC', 'DD', 'EE'
])
print("Colonnes du DataFrame d'origine :")
print(df.columns.tolist())
print()
# Filtrer les colonnes à une seule lettre et effectuer un calcul
single_letter_cols = df.filter(regex='^[A-E]$')
print("Moyenne des colonnes à une seule lettre (A-E) :")
print(single_letter_cols.mean())
print()
# Filtrer les colonnes à deux lettres et effectuer un calcul
double_letter_cols = df.filter(regex='^[A-E]{2}$')
print("Moyenne des colonnes à deux lettres (AA-EE) :")
print(double_letter_cols.mean())
print()
# Filtrer d'abord les colonnes, puis sélectionner les lignes
print("3 premières lignes des colonnes à deux lettres :")
print(df.filter(regex='^[A-E]{2}$').head(3))
Sortie :
原始 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
Explication du code :
filter()Il peut être enchaîné avec d'autres méthodes DataFrame.- Filtrez d'abord des colonnes spécifiques, puis effectuez des calculs statistiques, ce qui améliore la lisibilité du code.
- Ceci est particulièrement utile lors du traitement de tables larges.
Notes
items`items` est utilisé pour spécifier précisément les noms de colonnes, `like` est utilisé pour la correspondance floue, et `regex` est utilisé pour la correspondance par expression régulière. Choisissez la méthode appropriée selon les besoins réels.likeLors du traitement de grands ensembles de données, utilisez d'abordregexpour filtrer les colonnes nécessaires, ce qui peut réduire la quantité de données pour les calculs ultérieurs et améliorer les performances.- Par défaut, il agit sur les colonnes (axis=1), et peut être utilisé pour
filter()changer la direction du filtrage. filter()Remarqueaxis='index'ouaxis=0Ces trois paramètres sont mutuellement exclusifs et ne peuvent pas être utilisés simultanément.- Astuce :
items、like、regexC'est un outil puissant pour traiter des tables larges (ensembles de données avec de nombreuses colonnes). En particulier lors de la phase d'exploration des données, si vous souhaitez vous concentrer uniquement sur un certain type d'informations (comme toutes les colonnes numériques, toutes les colonnes commençant par un certain préfixe), l'utilisation de
celui-ci peut rapidement effectuer le filtrage des colonnes.
filter()Résuméfilter()Les colonnes peuvent être rapidement filtrées.
Résumé
filter()Il s'agit d'une fonction de Pandas spécifiquement utilisée pour filtrer des colonnes (et des lignes). Elle propose trois méthodes de filtrage : la spécification exacte (items), la correspondance floue (like) et la correspondance par expression régulière (regex).
Les principaux scénarios d'application de cette fonction incluent : filtrer des colonnes spécifiques, gérer des colonnes dont les noms suivent une convention régulière et sélectionner dynamiquement des colonnes pour l'analyse. Lorsqu'elle est utilisée en combinaison avec d'autres fonctions Pandas, elle peut considérablement améliorer l'efficacité du traitement des données et la lisibilité du code.
Autres extensions