Uso de grupos emparejados de expresiones regulares en la función de reemplazo de dataframe pandas

Solo estoy aprendiendo python / pandas y me gusta lo poderoso y conciso que es.

Durante la limpieza de datos quiero usar reemplazar en una columna en un dataframe con expresiones regulares pero quiero volver a insertar partes de la coincidencia (grupos).

Ejemplo simple: apellido, primer nombre -> primer nombre apellido

Intenté algo como lo siguiente (el caso real es más complejo, así que disculpe la expresión regular simple):

df['Col1'].replace({'([A-Za-z])+, ([A-Za-z]+)' : '\2 \1'}, inplace=True, regex=True) 

Sin embargo, esto da lugar a valores vacíos. La parte de coincidencia funciona como se esperaba, pero la parte de valor no funciona. Supongo que esto podría lograrse mediante una división y fusión, pero estoy buscando una respuesta general sobre si el grupo de expresiones regulares puede usarse para reemplazar.

Creo que tienes algunos problemas con los RegEx.

Como @Abdou acaba de decir, use '\\2 \\1' o mejor r'\2 \1' , ya que '\1' es un símbolo con código ASCII 1

Su solución debería funcionar si utiliza los RegEx correctos:

 In [193]: df Out[193]: name 0 John, Doe 1 Max, Mustermann In [194]: df.name.replace({r'(\w+),\s+(\w+)' : r'\2 \1'}, regex=True) Out[194]: 0 Doe John 1 Mustermann Max Name: name, dtype: object In [195]: df.name.replace({r'(\w+),\s+(\w+)' : r'\2 \1', 'Max':'Fritz'}, regex=True) Out[195]: 0 Doe John 1 Mustermann Fritz Name: name, dtype: object 

preparar

 df = pd.DataFrame(dict(name=['Smith, Sean'])) print(df) name 0 Smith, Sean 

usando replace

 df.name.str.replace(r'(\w+),\s*(\w+)', r'\2 \1') 0 Sean Smith Name: name, dtype: object 

utilizando extract
dividir en dos columnas

 df.name.str.extract('(?P\w+),\s*(?P\w+)', expand=True) Last First 0 Smith Sean