Quiero agregar un _xsufijo 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 _xsufijo 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 listcomprensió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=Trueopción de parámetro). De lo contrario, perfecto.
Si está intentando modificar dfen 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-stringformato (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, dfno 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_*fixEstos 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)
newo 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_prefixyadd_suffix
En futuras versiones de pandas add_prefixy add_suffixquedará 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 renamecon axis=1y 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)