Función df.replace() 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 (si
inplace=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 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:
- <<<SEP>>> El DataFrame tiene dos filas con el departamento 'Tecnología'.
- Usando
df.replace('技术', '研发')se reemplazan todos los 'tecnología' por 'I+D'. - 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
# 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 diccionario
replacements, podemos especificar múltiples reglas de reemplazo a la vez. - Este método es muy eficiente, ya que evita realizar múltiples llamadas a
replace()。
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
# 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
# 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 usa
VIPs*客户?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 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
# 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.
Otras extensiones