Comment sélectionner les colonnes d'une dataframe se terminant par *** avec pandas ?

Published: 03 septembre 2022

Tags: Python; Pandas; DataFrame;

DMCA.com Protection Status

Exemples de comment sélectionner (filtrer) les colonnes d'une dataframe se terminant par *** avec pandas

Créer une dataframe avec pandas

Commençons par créer un dataframe avec pandas

import pandas as pd
import numpy as np

data = np.arange(1,33)
data = data.reshape(4,8)

df = pd.DataFrame(data=data,columns=['product_l1','product_l2','product_l3','product_l4','product_id',
                                                                         'product_01_name','product_02_name','product_source'])

print(df)

donne

     product_l1  product_l2  product_l3  product_l4  product_id  \
0           1           2           3           4           5   
1           9          10          11          12          13   
2          17          18          19          20          21   
3          25          26          27          28          29

     product_01_name  product_02_name  product_source  
0                6                7               8  
1               14               15              16  
2               22               23              24  
3               30               31              32

Sélectionnez les colonnes qui se terminent par "_name"

Pour sélectionner uniquement les colonnes terminant par "_name", une solution consiste d'abord à créer une liste de noms de colonnes se terminant par "_name":

col_list = [col for col in df.columns if col.endswith('_name')]

donne ici

['product_01_name', 'product_02_name']

puis faire

df[col_list ]

ou

df.loc[:, col_list ]

ce qui donne

     product_01_name  product_02_name
0                6                7
1               14               15
2               22               23
3               30               31

Notez que

df.loc[:, df.columns.str.endswith('_name') ]

donne aussi

     product_01_name  product_02_name
0                6                7
1               14               15
2               22               23
3               30               31

Utilisation d'un filtre

Une autre solution consiste à utiliser filter() :

df.filter(regex='_name$',axis=1)

donne

     product_01_name  product_02_name
0                6                7
1               14               15
2               22               23
3               30               31

Sélectionnez les colonnes qui se terminent par '_l1', '_l2', '_l3' or '_l4'

Autre exemple plus complexe, sélectionnons les colonnes qui se terminent par'_l1', '_l2', '_l3' or '_l4':

col_list = [col for col in df.columns if col[:-1].endswith('_l')]

df.loc[:, col_list ]

donne

 product_l1  product_l2  product_l3  product_l4
0           1           2           3           4
1           9          10          11          12
2          17          18          19          20
3          25          26          27          28

Références