Esta es una adaptación de una pregunta planteada por @ScalaBoy aquí y respondida por @timgeb, la pregunta es la misma, excepto que se trata de un prefijo, no de un sufijo:
Dado el marco de datos de pandas, ¿cómo puedo agregar el prefijo "nuevo_" a todas las columnas, excepto a dos columnas, ID y nombre?
import pandas as pd data = [[1,'Alex',22,'single'],[2,'Bob',32,'married'],[3,'Clarke',23,'single']] df = pd.DataFrame(data,columns=['Id','Name','Age','Status'])Utilice añadir_prefijo. Esta función se aplica a todo el marco de datos. Para ocultar columnas que no necesita cambiar de nombre, configúrelas como índice. Después de cambiar el nombre, puede restablecer el índice. Código a continuación
df=df.set_index(['Id', 'Name']).add_prefix('new_').reset_index() Id Name new_Age new_Status 0 1 Alex 22 single 1 2 Bob 32 married 2 3 Clarke 23 singlePuede utilizar el método de cambio de rename :
df.rename({col:'new_'+ col for col in df.columns[~df.columns.isin(['Id','Name'])]}, axis=1)df.rename(columns = lambda col: f"new_{col}" if col not in ('Name', 'Id') else col ) Id Name new_Age new_Status 0 1 Alex 22 single 1 2 Bob 32 married 2 3 Clarke 23 singlePodrías lograrlo con expresiones regulares; sin embargo, en mi opinión, no es tan claro como la solución anterior:
new_col = df.columns.str.replace(pat = r"\b(?!Id|Name\b).+", repl = lambda m: f"new_{m[0]}", regex=True) df.set_axis(new_col, axis=1) # or df.columns = new_col Id Name new_Age new_Status 0 1 Alex 22 single 1 2 Bob 32 married 2 3 Clarke 23 single