Función pd.to-numeric() de Pandas

Pandas 通用函数Funciones comunes de Pandas


pd.to_numeric()Se utiliza en la biblioteca Pandas paraconvertir datos a tipos numéricosde la función. Puede convertir datos de varios formatos (como cadenas, columnas de tipos mixtos) a tipos numéricos como enteros, flotantes, etc.

Es una función común en la limpieza de datos, especialmente al procesar datos importados de archivos o bases de datos, donde a menudo es necesario convertir columnas que parecen numéricas pero en realidad son cadenas.

Significado de la palabra: to_numericSignifica "convertir a numérico", es decir, convertir datos de otros tipos a tipos numéricos.


Sintaxis básica y parámetros

pd.to_numeric()Es una función de nivel superior de la biblioteca Pandas, utilizada para convertir entradas a tipos numéricos.

Formato de sintaxis

pd.to_numeric(arg, errors='raise', downcast=None)

Descripción de parámetros

  • Parámetro: arg
    • Tipo: Series, lista, array u objeto similar a un diccionario.
    • Descripción: Los datos a convertir a tipos numéricos. Generalmente es una Series.
  • Parámetro: errors
    • Tipo: cadena ('raise', 'coerce', 'ignore').
    • Descripción: forma de manejo de errores.'raise'(Predeterminado) Lanza una excepción cuando encuentra un valor que no se puede convertir.'coerce'Establece los valores no convertibles como NaN.'ignore'Ignora errores y devuelve los datos originales.
  • Parámetro: downcast
    • Tipo: cadena ('integer', 'signed', 'unsigned', 'float') o None.

Descripción de la función

  • Valor de retorno: Devuelve una Series de tipo numérico.
  • Efecto: Convierte el tipo de los datos de entrada a numérico (int64 o float64).

Ejemplos

A través de una serie de ejemplos, de simples a complejos, dominaremos completamentepd.to_numeric()su uso.

Ejemplo 1: Uso básico: convertir cadenas a valores numéricos

Ejemplos

import pandas as pd

# 1. Crear una Series que contenga cadenas numéricas
s = pd.Series(['10', '20', '30', '40', '50'])

print("=== Series original (tipo: ", s.dtype, ")===")
print(s)

# 2. Usar pd.to_numeric() para convertir a tipos numéricos
result = pd.to_numeric(s)
print("\n=== Después de pd.to_numeric() (tipo: ", result.dtype, ")===")
print(result)

Resultado esperado:

=== 原始 Series(类型: object )===
0    10
1    20
2    30
3    40
5    50
dtype: object

=== pd.to_numeric() 转换后(类型: int64 )===
0    10
1    20
2    30
3    40
4    50
dtype: int64

Análisis del código:

  1. Los datos originales son de tipo cadena (object), no se pueden realizar operaciones numéricas.
  2. pd.to_numeric()Al convertirlos al tipo entero (int64), se pueden realizar operaciones matemáticas.

Ejemplo 2: Manejo de cadenas que contienen valores no numéricos

Usando elerrorsparámetro se pueden manejar de forma flexible los valores que no se pueden convertir.

Ejemplos

import pandas as pd
import numpy as np

# 1. Crear una Series que contenga cadenas no numéricas
s = pd.Series(['10', '20', 'abc', '40', 'ejemplo'])

print("=== Series con valores no numéricos ===")
print(s)

# 2. errors='raise' (predeterminado): lanza una excepción cuando encuentra un valor no convertible
print("\n=== errors='raise' (predeterminado) ===)
try:
    result = pd.to_numeric(s, errors='raise')
except Exception as e:
    print(f"Excepción: {e}")

# 3. errors='coerce': establece los valores no convertibles como NaN
print("\n=== errors='coerce' ===")
result_coerce = pd.to_numeric(s, errors='coerce')
print(result_coerce)

# 4. errors='ignore': ignora errores y devuelve los datos originales
print("\n=== errors='ignore' ===")
result_ignore = pd.to_numeric(s, errors='ignore')
print(result_ignore)
print(f"Tipo: {result_ignore.dtype}")

Resultado esperado:

=== 包含非数值的 Series ===
0      10
1      20
2     abc
3      40
4    ejemplo
包含了 'abc', 'ejemplo' 等无法转换的字符串

=== errors='raise'(默认)===
异常: Unable to convert string to float explicitly

=== errors='coerce' ===
0    10.0
1    20.0
2     NaN
3    40.0
4     NaN
dtype: float64

=== errors='ignore' ===
0      10
1      20
2     abc
3      40
4    ejemplo
Tipo: object

Análisis del código:

  • errors='coerce'Es muy práctico, reemplaza los valores no convertibles con NaN (valores faltantes) y conserva los valores convertibles.
  • errors='ignore'Mantiene los datos originales sin cambios, adecuado para situaciones donde solo se quiere intentar la conversión sin modificar los datos.

Ejemplo 3: Manejo de valores numéricos mixtos y valores faltantes

En datos reales, a menudo es necesario manejar columnas que contienen valores faltantes mezclados con valores numéricos.

Ejemplos

import pandas as pd
import numpy as np

# 1. Crear una Series que contenga valores faltantes y cadenas numéricas
s = pd.Series(['100', '200', None, 'N/A', '400', '', '500'])

print("=== Series con valores faltantes y no numéricos ===")
print(s)

# 2. Convertir usando errors='coerce'
print("\n=== Conversión usando errors='coerce' ===)
result = pd.to_numeric(s, errors='coerce')
print(result)

# 3. Ver qué valores se convirtieron a NaN
print("\n=== Identificar valores NaN ===)
print(f"Posiciones NaN: {result.isna().tolist()}")

# 4. Rellenar los NaN con 0 o eliminarlos
print("\n=== Rellenar NaN con 0 ===)
print(result.fillna(0))

Resultado esperado:

=== 包含缺失值和数值字符串的 Series ===
0      100
1      200
2     None
3    N/A
4      400
5       (空字符串)
6      字符串 '500'
dtype: object

=== 使用 errors='coerce' 转换 ===
0    100.0
1    200.0
 даль
2        NaN
3.       NaN
4     400.0
5        NaN
6     NaN
dtype: float64

Análisis del código:

  • errors='coerce'Puede manejar None, cadenas vacías, N/A y otras formas de representar valores faltantes, convirtiéndolos uniformemente a NaN.
  • El tipo después de la conversión se vuelve float64 (porque es necesario representar NaN).

Ejemplo 4: Uso del parámetro downcast para optimizar la memoria

Para conjuntos de datos grandes, se puede usar eldowncastparámetro downcast para reducir el uso de memoria.

Ejemplos

import pandas as pd
import numpy as np

# 1. Crear una Series de enteros grandes
s = pd.Series([1, 2, 3, 4, 5] * 100000)

print("=== Tipo original:", s.dtype)
print("=== Memoria original:", s.memory_usage(deep=True), "bytes")

# 2. Convertir a numérico sin especificar downcast
result_default = pd.to_numeric(s)
print("\n=== Tipo después de la conversión predeterminada:", result_default.dtype)
print("=== Memoria predeterminada:", result_default.memory_usage(deep=True), "bytes")

# 3. Convertir hacia abajo a un tipo entero más pequeño
result_signed = pd.to_numeric(s, downcast='signed')
print("\n=== Tipo con downcast='signed':", result_signed.dtype)
print("=== Memoria con downcast='signed':", result_signed.memory_usage(deep=True), "bytes")

# 4. Convertir hacia abajo a un tipo flotante
float_data = pd.Series([1.5, 2.5, 3.5] * 100000)
result_float = pd.to_numeric(float_data, downcast='float')
print("\n=== Tipo con downcast='float':", result_float.dtype)
print("=== Memoria con downcast='float':", result_float.memory_usage(deep=True), "bytes")

Resultado esperado:

=== 原始类型: int64
=== 原始内存: 2800000 bytes

=== 默认转换后类型: int64
内存节省:2.8 MB -> 1.4 MB
=== downcast='signed' 类型: int8/int16/int32
内存节省约 50%

=== downcast='float' 类型: float32
内存节省约 50%

Análisis del código:

  • Para conjuntos de datos grandes,downcastpuede reducir significativamente el uso de memoria.
  • downcast='signed'Intenta convertir enteros al tipo entero con signo más pequeño.
  • downcast='float'Convierte flotantes de float64 a float32.

Consejo:Al procesar datos a gran escala,pd.to_numeric()combinando elerrors='coerce'ydowncastparámetro downcast se puede convertir eficientemente datos mixtos a tipos numéricos y optimizar la memoria.

Pandas 常用函数Funciones comunes de Pandas

Otras extensiones