Seleccionar columnas basadas en nombres de columnas que contienen una cadena específica en pandas

Creé un dataframe utilizando lo siguiente:

df = pd.DataFrame(np.random.rand(10, 3), columns=['alp1', 'alp2', 'bet1']) 

Me gustaría obtener un dataframe que contenga todas las columnas de df que tengan alp en sus nombres. Esta es solo una versión ligera de mi problema, por lo que mi dataframe real tendrá más columnas.

metodos alternativos:

 In [13]: df.loc[:, df.columns.str.startswith('alp')] Out[13]: alp1 alp2 0 0.357564 0.108907 1 0.341087 0.198098 2 0.416215 0.644166 3 0.814056 0.121044 4 0.382681 0.110829 5 0.130343 0.219829 6 0.110049 0.681618 7 0.949599 0.089632 8 0.047945 0.855116 9 0.561441 0.291182 In [14]: df.loc[:, df.columns.str.contains('alp')] Out[14]: alp1 alp2 0 0.357564 0.108907 1 0.341087 0.198098 2 0.416215 0.644166 3 0.814056 0.121044 4 0.382681 0.110829 5 0.130343 0.219829 6 0.110049 0.681618 7 0.949599 0.089632 8 0.047945 0.855116 9 0.561441 0.291182 

Opción 1
numpy completo + pd.DataFrame

 m = np.core.defchararray.find(df.columns.values.astype(str), 'alp') >= 0 pd.DataFrame(df.values[:, m], df.index, df.columns[m]) alp1 alp2 0 0.819189 0.356867 1 0.900406 0.968947 2 0.201382 0.658768 3 0.700727 0.946509 4 0.176423 0.290426 5 0.132773 0.378251 6 0.749374 0.983251 7 0.768689 0.415869 8 0.292140 0.457596 9 0.214937 0.976780 

opcion 2
numpy + loc

 m = np.core.defchararray.find(df.columns.values.astype(str), 'alp') >= 0 df.loc[:, m] alp1 alp2 0 0.819189 0.356867 1 0.900406 0.968947 2 0.201382 0.658768 3 0.700727 0.946509 4 0.176423 0.290426 5 0.132773 0.378251 6 0.749374 0.983251 7 0.768689 0.415869 8 0.292140 0.457596 9 0.214937 0.976780 

sincronización
numpy es más rápido

introduzca la descripción de la imagen aquí

Tienes varias opciones, aquí hay un par:

1 – filter con like

 df.filter(like='alp') 

2 – filter con regex :

 df.filter(regex='alp')