¿Cómo eliminar varias columnas que terminan con el mismo texto en Pandas?

Estoy tratando de eliminar un grupo de columnas de un conjunto de datos. Todas las variables a eliminar terminan con el texto “prefijo”.

Logré “juntarlos” en un grupo usando lo siguiente: introduzca la descripción de la imagen aquí

y luego probé una serie de maneras de eliminar ese grupo que resultó en una variedad de errores. ¿Alguien puede, por favor, proponer una manera de eliminar estas columnas?

df2 = df.drop([col for col in df.columns if 'prefix' in col],axis=1) 
 df2 = df.ix[:, ~df.columns.str.endswith('prefix')] 

usando filter y regex

 df.filter(regex=r'^((?!prefix).)*$') 

Manifestación

 df = pd.DataFrame(np.random.rand(2, 6), columns=['oneprefix', 'one', 'twoprefix', 'two', 'threeprefix', 'three']) df.filter(regex=r'^((?!prefix).)*$') 

introduzca la descripción de la imagen aquí

dónde:

 df 

introduzca la descripción de la imagen aquí


Sincronización

Todos son casi iguales introduzca la descripción de la imagen aquí

en aras de la exhaustividad:

 In [306]: df Out[306]: prefixcol1 col2prefix col3prefix colN 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 In [307]: df.loc[:, ~df.columns.str.contains('prefix$')] Out[307]: prefixcol1 colN 0 1 1 1 2 2 2 3 3 

u otra variante:

 In [388]: df.select(lambda x: re.search(r'prefix$', str(x)) is None, axis=1) Out[388]: prefixcol1 colN 0 1 1 1 2 2 2 3 3 

Creo que necesitas:

 not_prefix_cols= [col for col in df.columns if not 'prefix' in col] df2[not_prefix_cols] 

Pero mejor es el uso:

 prefix_cols= [col for col in df.columns if not col.endswith('prefix')] print (df[prefix_cols]) 

Muestra:

 import pandas as pd df = pd.DataFrame({'prefixone' : pd.Series([1, 2, 3, 4]), 'twoprefix' : pd.Series([20, 30, 40, 50]), 'two1prefix' : pd.Series([20, 30, 40, 50])}) print (df) prefixone two1prefix twoprefix 0 1 20 20 1 2 30 30 2 3 40 40 3 4 50 50 prefix_cols= [col for col in df.columns if not col.endswith('prefix')] print (df[prefix_cols]) prefixone 0 1 1 2 2 3 3 4