
Vous pouvez extraire des lignes et des colonnes de pandas.DataFrame en fonction des noms de lignes et de colonnes (étiquettes d’index et de colonnes) avec la méthode filter().
Cet article décrit le contenu suivant.
- Comment utiliser pandas.DataFrame.filter()
- L’axe sur lequel filtrer :
axis 
 - L’axe sur lequel filtrer :
 - Correspondance exacte:
items - Correspondance partielle :
like - Expression régulière:
regex - Pour les pandas.Série
 
Consultez l’article suivant pour les bases de la sélection de lignes et de colonnes dans les pandas.
Utilisez les pandas.DataFrame suivants.
import pandas as pd
print(pd.__version__)
# 1.2.2
df = pd.DataFrame([[0, 1, 2], [3, 4, 5], [6, 7, 8]],
                  index=['apple', 'banana', 'pineapple'],
                  columns=['A', 'B', 'C'])
print(df)
#            A  B  C
# apple      0  1  2
# banana     3  4  5
# pineapple  6  7  8
Comment utiliser pandas.DataFrame.filter()
La méthode filter() de pandas.DataFrame renvoie un sous-ensemble en fonction des noms de ligne et de colonne.
Vous pouvez spécifier des conditions avec les paramètres items, like et regex. Si ces paramètres sont spécifiés simultanément, une erreur est levée. Les détails de chacun sont décrits ci-dessous.
print(df.filter(items=['A', 'C']))
#            A  C
# apple      0  2
# banana     3  5
# pineapple  6  8
# print(df.filter(items=['A', 'C'], like="A"))
# TypeError: Keyword arguments `items`, `like`, or `regex` are mutually exclusive
Si aucune ligne ou colonne ne satisfait la condition, un pandas.DataFrame vide est renvoyé.
print(df.filter(items=['X']))
# Empty DataFrame
# Columns: []
# Index: [apple, banana, pineapple]
L’axe sur lequel filtrer :axis
Vous pouvez spécifier l’axe sur lequel filtrer avec le paramètre d’axe. Les lignes sont filtrées pour 0 ou ‘index’, les colonnes pour 1 ou colonnes.
print(df.filter(items=['apple', 'pineapple'], axis=0))
#            A  B  C
# apple      0  1  2
# pineapple  6  7  8
print(df.filter(items=['apple', 'pineapple'], axis='index'))
#            A  B  C
# apple      0  1  2
# pineapple  6  7  8
print(df.filter(items=['A', 'C'], axis=1))
#            A  C
# apple      0  2
# banana     3  5
# pineapple  6  8
print(df.filter(items=['A', 'C'], axis='columns'))
#            A  C
# apple      0  2
# banana     3  5
# pineapple  6  8
Si omis, les colonnes sont filtrées.
print(df.filter(items=['A', 'C']))
#            A  C
# apple      0  2
# banana     3  5
# pineapple  6  8
Il n’est pas possible de filtrer simultanément les lignes et les colonnes. Si vous souhaitez filtrer à la fois les lignes et les colonnes, répétez filter().
print(df.filter(items=['A', 'C']).filter(items=['apple', 'pineapple'], axis=0))
#            A  C
# apple      0  2
# pineapple  6  8
Correspondance exacte:items
Vous pouvez extraire des lignes/colonnes dont les noms (étiquettes) correspondent exactement en spécifiant une liste pour le paramètre items. L’ordre des lignes et des colonnes du résultat est l’ordre de la liste spécifiée.
print(df.filter(items=['A', 'C']))
#            A  C
# apple      0  2
# banana     3  5
# pineapple  6  8
print(df.filter(items=['C', 'A']))
#            C  A
# apple      2  0
# banana     5  3
# pineapple  8  6
Vous pouvez faire de même en spécifiant une liste d’étiquettes avec [] ou loc[].
print(df[['C', 'A']])
#            C  A
# apple      2  0
# banana     5  3
# pineapple  8  6
print(df.loc[:, ['C', 'A']])
#            C  A
# apple      2  0
# banana     5  3
# pineapple  8  6
print(df.loc[['pineapple', 'apple']])
#            A  B  C
# pineapple  6  7  8
# apple      0  1  2
Correspondance partielle :like
Vous pouvez extraire des lignes/colonnes dont les noms (étiquettes) correspondent partiellement en spécifiant une chaîne pour le paramètre like.
print(df.filter(like='apple', axis=0))
#            A  B  C
# apple      0  1  2
# pineapple  6  7  8
Les lignes et les colonnes avec comme dans l’étiquette == True sont extraites.
Pour spécifier plusieurs conditions, utilisez l’expression régulière décrite ci-dessous.
Expression régulière:regex
Vous pouvez extraire des lignes/colonnes en sélectionnant leurs noms (étiquettes) avec des expressions régulières en spécifiant le modèle d’expression régulière pour le paramètre regex.
Voir la documentation officielle pour les caractères spéciaux dans les expressions régulières.
Extraire les lignes dont les noms se terminent par ‘e’.
print(df.filter(regex='e$', axis=0))
#            A  B  C
# apple      0  1  2
# pineapple  6  7  8
Extraire les lignes dont les noms commencent par ‘a’ ou ‘b’.
print(df.filter(regex='^(a|b)', axis=0))
#         A  B  C
# apple   0  1  2
# banana  3  4  5
Extraire les lignes dont les noms contiennent ‘na’ ou ‘ne’.
print(df.filter(regex='(na|ne)', axis=0))
#            A  B  C
# banana     3  4  5
# pineapple  6  7  8
Pour les pandas.Série
La série a également une méthode filter(). Son utilisation est la même que pandas.DataFrame.
s = pd.Series([0, 1, 2], index=['apple', 'banana', 'pineapple'])
print(s)
# apple        0
# banana       1
# pineapple    2
# dtype: int64
print(s.filter(items=['pineapple', 'banana']))
# pineapple    2
# banana       1
# dtype: int64
print(s.filter(like='apple'))
# apple        0
# pineapple    2
# dtype: int64
print(s.filter(regex='^(a|b)'))
# apple     0
# banana    1
# dtype: int64
