Función df.replace() de Pandas

Funciones comunes de Pandas


df.replace()Es una función de Pandas utilizada para reemplazar datos en un DataFrame.

El reemplazo de datos es una operación común en la limpieza de datos,replace()puede ayudarte a reemplazar valores específicos por nuevos valores, y admite múltiples formas flexibles como reemplazo de un solo valor, reemplazo de múltiples valores, reemplazo con expresiones regulares, etc. Esto es muy útil en escenarios como el manejo de valores atípicos, la unificación de formatos de datos, la conversión de codificaciones, entre otros.


Sintaxis básica y parámetros

replace()Es una función miembro de DataFrame, mediante el operador de punto.se invoca.

Formato de sintaxis

DataFrame.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')

Descripción de parámetros

Parámetro Tipo ¿Obligatorio? Descripción Valor predeterminado
to_replace str, regex, list, dict, int, float, None Obligatorio El valor a reemplazar. Puede ser un solo valor, una lista de valores, un diccionario, una expresión regular, etc. None
value scalar, dict, list, str, regex, None Opcional El valor de reemplazo. Sito_replacees un diccionario, este parámetro puede omitirse; si no es un diccionario, este parámetro es obligatorio. None
inplace bool Opcional Si esTrue, modifica directamente el DataFrame original y no devuelve un nuevo objeto; si esFalse, devuelve un nuevo DataFrame y los datos originales no cambian. False
limit int Opcional Especifica el número máximo de reemplazos. None
regex bool o str Opcional Si esTrue, seto_replacetrata como expresión regular. False
method str Opcional Cuandoto_replaceSe usa cuando es una lista.'pad'o'ffill'Indica relleno hacia adelante;'backfill'o'bfill'Indica relleno hacia atrás. 'pad'

Descripción del valor de retorno

  • Devuelve un nuevo DataFrame (siinplace=False), oNone(siinplace=True)。
  • Los valores especificados han sido reemplazados en el DataFrame devuelto.

Ejemplos

A través de una serie de ejemplos, dominaremos a fondoreplace()el uso de esta función.

Ejemplo 1: Reemplazo de un solo valor

Reemplaza un valor específico en el DataFrame por un nuevo valor.

Ejemplo

import pandas as pd
import numpy as np

# Crear un DataFrame con datos duplicados
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
    'Departamento': ['Tecnología', 'Mercado', 'Tecnología', 'Mercado'],
    'Salario': [5000, 6000, 5500, 7000]
}
df = pd.DataFrame(data)

print("datos originales:")
print(df)
print("=" * 50)

# Reemplazar Tecnología por "研Publicar"
df_replaced = df.replace('Tecnología', Investigación y desarrollo)

print(Datos reemplazados:)
print(df_replaced)

Resultado esperado:

原始数据:
    姓名  部门   薪资
0  张三  技术  5000
1  李四  市场  6000
2  王五  技术  5500
3  赵六  市场  7000
==================================================
替换后的数据:
    姓名   部门  薪资
0  张三  研发  5000
1  李四  市场  6000
2  王五  研发  5500
3  赵六  市场  7000

Análisis del código:

  1. <<<SEP>>> El DataFrame tiene dos filas con el departamento 'Tecnología'.
  2. Usandodf.replace('技术', '研发')se reemplazan todos los 'tecnología' por 'I+D'.
  3. Este método reemplaza todos los valores coincidentes en el DataFrame.

Ejemplo 2: Reemplazo uno a uno de múltiples valores

Usa un diccionario para reemplazar de una vez varios valores diferentes.

Ejemplo

import pandas as pd

# Crea un DataFrame que contenga los datos a reemplazar
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
    'Ciudad': ['Pekín', Shanghái, 'Guangzhou', 'Shenzhen'],
    Nivel: ['A', 'B', 'A', 'C']
}
df = pd.DataFrame(data)

print("datos originales:")
print(df)
print("=" * 50)

# Usar un diccionario para realizar múltiples reemplazos
replacements = {
    'Pekín': 'Beijing',
    Shanghái: 'Shanghái',
    'Guangzhou': 'Guangzhou',
    'Shenzhen': Shenzhen,
    'A': Excelente,
    'B': Bueno,
    'C': Aprobado
}
df_replaced = df.replace(replacements)

print(Datos reemplazados:)
print(df_replaced)

Resultado esperado:

原始数据:
    姓名  城市  等级
0  张三  北京   A
1  李四  上海   B
2  王五  广州   A
3  赵六  深圳   C
==================================================
替换后的数据:
    姓名   城市  等级
0  张三  北京市  优秀
1  李四  上海市  良好
2  王五  广州市  优秀
3  赵六  深圳市  及格

Análisis del código:

  • Mediante el diccionarioreplacements, podemos especificar múltiples reglas de reemplazo a la vez.
  • Este método es muy eficiente, ya que evita realizar múltiples llamadas areplace()。

Ejemplo 3: Reemplazo de valores en una columna específica

Puede reemplazar solo los valores de una columna específica sin afectar a otras columnas.

Ejemplo

import pandas as pd

# Crear un DataFrame
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
    'Departamento': ['Tecnología', 'Mercado', 'Tecnología', 'Mercado'],
    Cargo: ['Tecnología', 'Mercado', 'Tecnología', 'Mercado']
}
df = pd.DataFrame(data)

print("datos originales:")
print(df)
print("=" * 50)

# Reemplazar solo 'Tecnología' por Investigación y desarrollo en la columna 'Departamento'
df_replaced = df.replace({'Departamento': 'Tecnología'}, Investigación y desarrollo)

print("Datos después de reemplazar solo la columna de departamento:")
print(df_replaced)
print("=" * 50)

# También se puede usar un diccionario anidado para aplicar diferentes reglas de reemplazo a diferentes columnas
df_replaced2 = df.replace({'Departamento': {'Tecnología': Investigación y desarrollo, 'Mercado': Ventas}, Cargo: 'Tecnología'})

print("Datos reemplazados usando diferentes reglas para cada columna:")
print(df_replaced2)

Resultado esperado:

原始数据:
    姓名  部门  职位
0  张三  技术  技术
1  李四  市场  市场
2  王五  技术  技术
3  赵六  市场  市场
==================================================
只替换部门列后的数据:
    姓名   部门  职位
0  张三  研发  技术
1  李四  市场  市场
2  王五  研发  技术
3  赵六  市场  市场
==================================================
对不同列使用不同规则替换后的数据:
    姓名   部门  职位
0  张三  研发  研发
1  李四  销售  市场
2  王五  研发  研发
3  赵六  销售  市场

Análisis del código:

  • Usando{'departamento': 'tecnología'}se pueden reemplazar solo los valores de la columna 'departamento'.
  • El diccionario anidado{'departamento': {'tecnología': 'investigación y desarrollo'}}permite especificar diferentes reglas de reemplazo para diferentes columnas.

Ejemplo 4: Reemplazo mediante expresiones regulares

regex=TrueEl parámetro permite usar expresiones regulares para el reemplazo, lo que resulta muy útil al procesar texto que coincide con patrones.

Ejemplo

import pandas as pd

# Crear un DataFrame que contenga datos que requieren procesamiento con expresiones regulares
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
    Teléfono: ['138-0000-0000', '139-1111-1111', '137-2222-2222', '136-3333-3333'],
    Observaciones: [Normal, Clientes VIP, Normal, Cliente VIP]
}
df = pd.DataFrame(data)

print("datos originales:")
print(df)
print("=" * 50)

# Usar expresiones regulares para reemplazar separadores en teléfonos
df_replaced = df.replace(to_replace=r'(d{3})-(d{4})-(d{4})', value=r'1****3', regex=True)

print("Datos después de reemplazar el número de teléfono (ocultando los 4 dígitos del medio):")
print(df_replaced)
print("=" * 50)

# Reemplazar "cliente VIP" en la nota (puede haber diferencias de espacios)
df_replaced2 = df.replace(to_replace=r'VIPs*cliente?', value='VIP', regex=True)

print(Datos después de unificar las notas VIP:)
print(df_replaced2)

Resultado esperado:

原始数据:
    姓名          电话        备注
0  张三  138-0000-0000       正常
1  李四  139-1111-1111   VIP客户
2  王五  137-2222-2222       正常
3  赵六  136-3333-3333  VIP 客户
==================================================
替换电话号码(隐藏中间4位)后的数据:
    姓名          电话  备注
0  张三  138****0000   正常
1  李四  139****1111  VIP客户
2  王五  137****2222   正常
3  赵六  136****3333  VIP 客户
==================================================
统一VIP备注后的数据:
    姓名          电话  备注
0  张三  138-0000-0000  正常
1  李四  139-1111-1111  VIP
2  王五  137-2222-2222  正常
3  赵六  136-3333-3333  VIP

Análisis del código:

  • El primer ejemplo usa la expresión regular(d{3})-(d{4})-(d{4})para coincidir con el formato de número de teléfono y reemplazarlo por1****3, ocultando los 4 dígitos centrales.
  • El segundo ejemplo usaVIPs*客户?para coincidir con los formatos 'VIP客户' y 'VIP 客户', y los reemplaza de manera uniforme por 'VIP'.

Ejemplo 5: Reemplazo de valores faltantes NaN

replace()También se puede usar para reemplazar valores faltantesNaN, lo cual es una operación común en la limpieza de datos.

Ejemplo

import pandas as pd
import numpy as np

# Crear un DataFrame que contenga valores faltantes
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
    'Edad': [25, np.nan, 35, np.nan],
    'Salario': [5000, 6000, np.nan, 8000]
}
df = pd.DataFrame(data)

print("Datos originales:")
print(df)
print("=" * 50)

# Reemplazar NaN por 0
df_replaced = df.replace(np.nan, 0)

print("Datos después de reemplazar NaN por 0:")
print(df_replaced)
print("=" * 50)

# Reemplazar NaN con otro valor, como "desconocido"
df_replaced2 = df.replace(np.nan, 'desconocido')

print("Datos después de reemplazar NaN por 'desconocido':")
print(df_replaced2)

Resultado esperado:

原始数据:
    姓名   年龄    薪资
0  张三  25.0  5000.0
1  李四   NaN  6000.0
2  王五  35.0     NaN
3  赵六   NaN  8000.0
==================================================
将 NaN 替换为 0 后的数据:
    姓名   年龄  薪资
0  张三  25.0  5000
1  李四   0.0  6000
2  王五  35.0     0
3  赵六   0.0  8000
==================================================
将 NaN 替换为'未知'后的数据:
    姓名   年龄    薪资
0  张三  25.0  5000.0
1  李四  未知  6000.0
2  王五  35.0    未知
3  赵六  未知  8000.0

Análisis del código:

  • np.nanRepresenta un valor faltante, puede usarreplace(np.nan, value)para reemplazarlo.
  • Según el tipo de datos y las necesidades del negocio, elija un valor adecuado para reemplazar los valores faltantes.

Ejemplo 6: Reemplazo de valores numéricos

Se pueden reemplazar datos de tipo numérico para realizar estandarización de datos o tratamiento de valores atípicos.

Ejemplo

import pandas as pd

# Crear un DataFrame con valores atípicos
data = {
    'Estudiante': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
    'Calificación': [85, 150, 78, 92, -10]  # 150 y -10 son valores atípicos
}
df = pd.DataFrame(data)

print("Datos originales:")
print(df)
print("=" * 50)

# Reemplazar los valores atípicos por valores en un rango razonable
df_replaced = df.replace({150: 100, -10: 0})

print("Datos después de reemplazar los valores atípicos:")
print(df_replaced)
print("=" * 50)

# Usar una condición para reemplazar múltiples valores
df_replaced2 = df.replace(to_replace=[150, -10], value=[100, 0])

print("Usar una lista para reemplazar múltiples valores:")
print(df_replaced2)

Resultado esperado:

原始数据:
    学生  成绩
0  张三    85
1  李四   150
2  王五    78
3  赵六    92
4  钱七   -10
==================================================
将异常值替换后的数据:
    学生  成绩
0  张三    85
1  李四   100
2  王五    78
3  赵六    92
4  钱七     0
==================================================
使用列表替换多个值:
    学生  成绩
0  张三    85
1  李四   100
2  王五    78
3  赵六    92
4  钱七     0

Análisis del código:

  • Diccionario{150: 100, -10: 0}Reemplace el valor atípico 150 por 100, y -10 por 0.
  • Lista[150, -10]y[100, 0]Especifique respectivamente los valores a reemplazar y los valores de reemplazo, correspondiendo en orden.

Notas

  • replace()De forma predeterminada, no se modifica el DataFrame original; si desea modificarlo en el lugar, useinplace=Trueparámetro.
  • Al usar expresiones regulares, asegúrese de que la sintaxis de la expresión regular sea correcta; las expresiones regulares complejas pueden causar resultados inesperados.
  • La operación de reemplazo se basa en la coincidencia de valores y no cambiará el tipo de datos.
  • Tenga en cuenta la distinción entre mayúsculas y minúsculas; 'técnica' y 'Técnica' son valores diferentes.
  • Antes de realizar el reemplazo de datos, se recomienda hacer una copia de seguridad de los datos originales para poder compararlos y rastrearlos.

Funciones comunes de Pandas

Otras extensiones