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?
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.
fuente
inplace=Trueopción de parámetro). De lo contrario, perfecto.Concatenación elegante en el lugar
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 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 4df.columns += '_some_suffix' df A_some_suffix B_some_suffix 0 9 12 1 4 7 2 2 5 3 1 4Para 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 4Otra 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 4Y 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_suffixdf.add_suffix('_some_suffix') A_some_suffix B_some_suffix 0 9 12 1 4 7 2 2 5 3 1 4Esto 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 4Que tampoco modifica
df.Crítica de
add_*fixEstos 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
newoold) 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_prefixyadd_suffixEn futuras versiones de pandas
add_prefixyadd_suffixquedará 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 6Usando
renameconaxis=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 6Para 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