Resumen: Para extraer números de una cadena determinada en Python puedes usar uno de los siguientes métodos:
- Utiliza el módulo
regex
. - Utiliza las funciones
split()
yappend()
en una lista. - Utiliza una comprensión de lista con las funciones
isdigit()
ysplit()
. - Utiliza el módulo num_from_string.
Extraer dígitos o números de una cadena dada puede surgir en tu trayectoria como programador con bastante frecuencia. Tanto si estás automatizando un script en python y quieres extraer ciertas cifras numéricas de un archivo CSV, como si eres un científico de datos y necesitas separar dígitos y cifras complejas de patrones dados, o si eres un entusiasta de python que quiere aprender más sobre cadenas y tipos de datos numéricos, este artículo te resultará ciertamente útil. Dicho esto, vamos a profundizar en nuestra pregunta clave:
Problema: Dada una cadena; ¿cómo extraer números de la cadena en Python?
Ejemplo: Imagina que te han dado una cadena y quieres extraer todos los números de la cadena como se indica en el siguiente ejemplo:
Dada la siguiente cadena:
Extract 100, 1000 and 10000 from this string
Esta es la salida deseada:
[100, 1000, 10000]
Vamos a comentar los métodos que podemos utilizar para extraer los números de la cadena dada:
Método 1: Uso del módulo regex
El enfoque más eficiente para resolver nuestro problema es aprovechar la potencia del módulo regex
. Puedes utilizar fácilmente Expresiones Regulares (RegEx) para comprobar o verificar si una cadena dada contiene un patrón especificado (ya sea un dígito o un carácter especial o cualquier otro patrón).
Por lo tanto, para resolver nuestro problema debemos importar el módulo regex, que está incluido en la biblioteca estándar de Python, y luego con la ayuda de la función findall()
podemos extraer los números de la cadena dada.
◈ findall()
es una función de regex fácil de usar que devuelve una lista que contiene todas las coincidencias. Para saber más sobre findall()
consulta el tutorial de nuestro blog aquí.
Veamos el siguiente código para comprender cómo podemos usar el módulo regex
para resolver nuestro problema:
import re sentence = 'Extract 100 , 100.45 and 10000 from this string' s = [float(s) for s in re.findall(r'-?\d+\.?\d*', sentence)] print(s)
Salida
[100.0, 100.45, 10000.0]
Método 2: Separar y anexar los números a una lista usando las funciones split() y append()
Otra solución a nuestro problema es dividir la cadena dada con la función split()
, extraer los números con el método incorporado float()
y anexar los números extraídos a la lista.
Nota:
split()
es un método incorporado de python que se utiliza para dividir una cadena en lista.append()
es un método incorporado en python que añade un elemento al final de una lista.
Ahora que tenemos las herramientas necesarias para resolver nuestro problema basado en el concepto anterior, vamos a profundizar en el código para ver cómo funciona:
sentence = 'Extract 100 , 100.45 and 10000 from this string' s = [] for t in sentence.split(): try: s.append(float(t)) except ValueError: pass print(s)
Salida
[100.0, 100.45, 10000.0]
Método 3: Uso de la función isdigit() en una comprensión de lista
Otro enfoque para resolver nuestro problema es utilizar la función incorporada isdigit()
para extraer los dígitos de la cadena y luego almacenarlos en una lista utilizando una comprensión de lista. La función isdigit()
se utiliza para comprobar si una cadena dada contiene dígitos. Por lo tanto, si encuentra un carácter que es un dígito, devuelve True
, de lo contrario, devuelve False
.
Echemos un vistazo al código que aparece a continuación para ver cómo funciona el concepto anterior:
sentence = 'Extract 100 , 100.45 and 10000 from this string' s = [int(s) for s in str.split(sentence) if s.isdigit()] print(s)
Salida
[100, 10000]
☢ ¡Alerta! Esta técnica es adecuada para extraer sólo números enteros positivos. No funcionará con enteros negativos, floats o números hexadecimales.
Método 4: Uso de la biblioteca Numbers from String
Este es un truco rápido para evitar perder tiempo escribiendo código de forma explícita para extraer números de una cadena. Puedes importar una biblioteca conocida como nums_from_string
y luego usarla para extraer números de una cadena determinada. Contiene varias reglas regex
con una amplia cobertura y puede ser una herramienta muy útil para los investigadores de PNL.
Dado que la biblioteca Numbers from String no forma parte de la biblioteca estándar de Python, debes instalarla antes de poder usarla. Utiliza el siguiente comando para instalar esta útil biblioteca:
pip install nums_from_string
El siguiente programa muestra el uso de nums_from_string
:
import nums_from_string sentence = 'Extract 100 , 100.45 and 10000 from this string' print(nums_from_string.get_nums(sentence))
Salida
[100.0, 100.45, 10000.0]
Conclusión
Así, a partir de las explicaciones anteriores, comprobamos que hay diversas maneras de extraer un número de una cadena dada en python. Sin embargo, mi favorito personal sería sin duda el módulo regex. Se podría argumentar que el uso de otros métodos, como las funciones isdigit()
y split()
, proporciona un código más sencillo y legible y es más rápido. Sin embargo, como ya se ha dicho, no devuelve números negativos (en referencia al método 2) y tampoco funciona con los floats que no tienen espacio entre ellos y otros caracteres como "25.50k"
(en referencia al método 2). Además, la velocidad es una métrica irrelevante cuando se trata de procesar registros. Ahora ves por qué regex es mi favorito personal en esta lista de soluciones.
En caso de que no seas muy partidario de la biblioteca re
, sobre todo porque te cuesta hacerte con este concepto (como a mí al principio), aquí tienes EL TUTORIAL para que te conviertas en un maestro del regex.
Espero que este artículo te haya resultado útil y te haya aportado algo de valor a tu trayectoria como programador. Por favor, mantente atento a más cosas interesantes en el futuro.
¿A dónde ir a partir de aquí?
Suficiente teoría. ¡Vamos a practicar un poco!
Los programadores cobran seis cifras y más porque pueden resolver problemas de forma más eficaz utilizando la inteligencia de las máquinas y la automatización. Para tener más éxito como programador, resuelve más problemas reales para personas reales. Así es como se pulen las habilidades que realmente necesitas en la práctica. After all, what’s the use of learning theory that nobody ever needs?
¡Desarrollarás destrezas de programación de alto valor al trabajar en proyectos prácticos de programación!
¿Quieres dejar de aprender con proyectos de juguete y centrarte en proyectos prácticos de código que te hagan ganar dinero y resuelvan problemas reales para la gente?
Si tu respuesta es SÍ, considera la posibilidad de convertirte en un desarrollador freelance de Python. It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.
Join my free webinar “How to Build Your High-Income Skill Python” and watch how I grew my coding business online and how you can, too—from the comfort of your own home.