¿Cómo agregar un sufijo (o prefijo) a cada nombre de columna?

Quiero agregar el sufijo _x a cada nombre de columna así:

 featuresA = myPandasDataFrame.columns.values + '_x' 

¿Cómo hago esto? Además, si quisiera agregar x_ como sufijo, ¿cómo cambiaría la solución?

Puede utilizar una list comprensión:

 df.columns = [str(col) + '_x' for col in df.columns] 

También hay métodos .add_suffix() como .add_suffix() y add_prefix como se menciona en otra respuesta.

La siguiente es la mejor manera de agregar un sufijo en mi opinión.

 df = df.add_suffix('_some_suffix') 

Como es una función que se llama en DataFrame y devuelve DataFrame, puede usarla en cadena de las llamadas.

Elegante concatenación en el lugar

Si está intentando modificar df en el lugar, entonces la opción más barata (y la más simple) es la adición en el lugar directamente en df.columns (es decir, utilizando Index.__iadd__ ).

 df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]}) df AB 0 9 12 1 4 7 2 2 5 3 1 4 

 df.columns += '_some_suffix' df A_some_suffix B_some_suffix 0 9 12 1 4 7 2 2 5 3 1 4 

Para agregar un prefijo, usaría de manera similar

 df.columns = 'some_prefix_' + df.columns df some_prefix_A some_prefix_B 0 9 12 1 4 7 2 2 5 3 1 4 

Otra opción barata es usar una lista de comprensión con formato de f-string (disponible en python3.6 +).

 df.columns = [f'{c}_some_suffix' for c in df] df A_some_suffix B_some_suffix 0 9 12 1 4 7 2 2 5 3 1 4 

Y para prefijo, de manera similar,

 df.columns = [f'some_prefix{c}' for c in df] 

Método de encadenamiento

También es posible hacer correcciones * agregadas mientras se encadena el método. Para agregar un sufijo, use DataFrame.add_suffix

 df.add_suffix('_some_suffix') A_some_suffix B_some_suffix 0 9 12 1 4 7 2 2 5 3 1 4 

Esto devuelve una copia de los datos. IOW, df no se modifica.

La adición de prefijos también se realiza con DataFrame.add_prefix .

 df.add_prefix('some_prefix_') some_prefix_A some_prefix_B 0 9 12 1 4 7 2 2 5 3 1 4 

Lo cual tampoco modifica df .


Crítica de add_*fix

Estos son buenos métodos si está intentando realizar un encadenamiento de métodos:

 df.some_method1().some_method2().add_*fix(...) 

Sin embargo, add_prefix (y add_suffix ) crea una copia de todo el dataframe, solo para modificar los encabezados. Si crees que esto es un desperdicio, pero todavía quieres encadenar, puedes llamar a pipe :

 def add_suffix(df): df.columns += '_some_suffix' return df df.some_method1().some_method2().pipe(add_suffix)