Quiero agregar un _x
sufijo 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 integrados como .add_suffix()
y .add_prefix()
como se menciona en otra respuesta.
En mi opinión, la siguiente es la forma más agradable de agregar un sufijo.
df = df.add_suffix('_some_suffix')
Como es una función que se llama en DataFrame y devuelve DataFrame, puede usarla en la cadena de llamadas.
fuente
inplace=True
opción de parámetro). De lo contrario, perfecto.Concatenación elegante en el lugar
Si está intentando modificar
df
en el lugar, entonces la opción más barata (y más simple) es la adición en el lugar directamente endf.columns
(es decir, usarIndex.__iadd__
).df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]}) df A B 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 económica es usar una lista de comprensión con
f-string
formato (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]
Encadenamiento de métodos
También es posible agregar * correcciones 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
Que tampoco modifica
df
.Crítica de
add_*fix
Estos son buenos métodos si está intentando realizar un encadenamiento de métodos:
Sin embargo,
add_prefix
(yadd_suffix
) crea una copia de todo el marco de datos, solo para modificar los encabezados. Si cree que esto es un desperdicio, pero aún desea encadenar, puede llamar apipe
:def add_suffix(df): df.columns += '_some_suffix' return df df.some_method1().some_method2().pipe(add_suffix)
fuente
new
oold
) en lugar de todas las columnas? Gracias.df = pd.DataFrame([[1,2,3]]*10)
->df.columns
, entonces usaríadf.add_suffix('_x')
df.columns = df.columns.astype(str) + '_x'
que muestra mi primer método.No he visto esta solución propuesta anteriormente, así que agregué esto a la lista:
df.columns += '_x'
Y puede adaptarse fácilmente al escenario de prefijo.
fuente
df = pd.DataFrame([[1,2,3]]*10)
->df.columns
, entonces usaríadf.add_suffix('_x')
Conozco 4 formas de agregar un sufijo (o prefijo) a los nombres de sus columnas:
1-
df.columns = [str(col) + '_some_suffix' for col in df.columns]
o
2-
df.rename(columns= lambda col: col+'_some_suffix')
o
3-
df.columns += '_some_suffix'
mucho facil.o, el más bonito:
3-
df.add_suffix('_some_suffix')
fuente
Usando
DataFrame.rename
.Desaprobación de
add_prefix
yadd_suffix
En futuras versiones de pandas
add_prefix
yadd_suffix
quedará obsoleto . El nuevo método recomendado es utilizarDataFrame.rename
:df = pd.DataFrame({'A': range(3), 'B': range(4, 7)}) print(df) A B 0 0 4 1 1 5 2 2 6
Usando
rename
conaxis=1
y formato de cadena:df.rename('col_{}'.format, axis=1) # or df.rename(columns='col_{}'.format) col_A col_B 0 0 4 1 1 5 2 2 6
Para sobrescribir los nombres de sus columnas, podemos asignar los valores devueltos a nuestro
df
:df = df.rename('col_{}'.format, axis=1)
o use
inplace=True
:df.rename('col_{}'.format, axis=1, inplace=True)
fuente