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.
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]
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
.
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)