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?
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?
Respuestas:
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.
inplace=True
opción de parámetro). De lo contrario, perfecto.
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 en df.columns
(es decir, usar Index.__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]
También es posible agregar * correcciones mientras se encadena el método. Para agregar un sufijo, useDataFrame.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
.
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 marco de datos, solo para modificar los encabezados. Si cree que esto es un desperdicio, pero aún desea encadenar, puede llamar a pipe
:
def add_suffix(df):
df.columns += '_some_suffix'
return df
df.some_method1().some_method2().pipe(add_suffix)
new
o old
) 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.
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')
DataFrame.rename
.Desaprobación de add_prefix
yadd_suffix
En futuras versiones de pandas add_prefix
y add_suffix
quedará obsoleto . El nuevo método recomendado es utilizar DataFrame.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
con axis=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)