Función Pandas Series.str.contains()
Series.str.contains()Es una función de Pandas utilizada para verificar si una cadena contiene una subcadena especificada.
En el procesamiento de datos, a menudo necesitamos filtrar y depurar según el contenido del texto, como buscar registros que contengan palabras clave específicas, filtrar textos que coincidan con un patrón determinado, etc.contains()La función puede comprobar si cada elemento de cadena contiene la subcadena especificada o el patrón de expresión regular.
Definición del término:containsSignifica 'contener', es decir, comprobar si la cadena contiene el contenido especificado.
Sintaxis básica y parámetros
str.contains()Es el método de acceso a cadenas de Series, por lo que primero necesitas tener una Series que contenga cadenas y luego llamarlo a través del.straccessor.
Formato de sintaxis
Series.str.contains(pat, case=True, regex=True, na=None)
Descripción de parámetros
| Parámetro | Tipo | ¿Obligatorio? | Descripción | Valor predeterminado |
|---|---|---|---|---|
| pat | str | Obligatorio | El patrón a buscar, puede ser una cadena normal o una expresión regular. | - |
| case | bool | Opcional | Si distingue entre mayúsculas y minúsculas. El valor predeterminado es True (distingue mayúsculas y minúsculas). | True |
| regex | bool | Opcional | Si se trata el parámetro pat como una expresión regular. El valor predeterminado es True. | True |
| na | object | Opcional | El valor que se devuelve cuando el elemento es NaN. El valor predeterminado es None (devuelve NaN). | None |
Descripción de la función
- Valor de retorno: Devuelve una Series de valores booleanos que indica si cada elemento contiene el patrón especificado.
- Efecto: Comprueba cada elemento de cadena en la Series y devuelve True o False.
- Nota: Por defecto se utiliza la coincidencia con expresiones regulares, lo que permite coincidir con patrones más complejos.
Ejemplos
A través de una serie de ejemplos de simples a complejos, dominaremos por completostr.contains()su uso.
Ejemplo 1: Uso básico - Comprobar si contiene una subcadena
Ejemplo
# Crear una Series que contenga texto
s = pd.Series(['apple', 'banana', 'grape', 'pineapple', 'orange'])
# Comprobar si contiene 'ap'
result = s.str.contains('ap')
print("Serie original:")
print(s)
print("n¿Contiene 'ap':")
print(result)
Resultado de salida:
原始 Series: 0 apple 1 banana 2 grape 3 pineapple 4 orange dtype: object 是否包含 'ap': 0 True 1 False 2 True 3 True 4 False
Análisis del código:
s.str.contains('ap')Comprueba si cada cadena contiene la subcadena 'ap'.- 'apple' contiene 'ap', devuelve True.
- 'banana' no contiene 'ap', devuelve False.
- 'grape' contiene 'ap', devuelve True.
- 'pineapple' contiene 'ap', devuelve True.
Ejemplo 2: Uso de coincidencia con expresiones regulares
contains()Por defecto se utilizan expresiones regulares, lo que permite coincidir con patrones más complejos.
Ejemplo
# Crear una Series que contenga texto
s = pd.Series(['hello123', 'world456', 'ejemplo789', 'python', 'test123'])
# Usar expresión regular para coincidir con cadenas que empiezan con una letra seguida de un número
result = s.str.contains(r'^[a-zA-Z]+d+$')
print("Serie original:")
print(s)
print("nPatrón que coincide con letra inicial + número final:")
print(result)
Resultado de salida:
原始 Series: 0 hello123 1 world456 2 ejemplo789 3 python 4 test123 dtype: object 匹配字母开头+数字结尾的模式: 0 True 1 True 2 True 3 False 4 True
Análisis del código:
r'^[a-zA-Z]+d+$'Es una expresión regular que coincide con cadenas que comienzan con una letra y terminan con un número.^Indica el inicio de la cadena,$Indica el final de la cadena.- 'python' no contiene números, por lo que no coincide.
Ejemplo 3: Coincidencia sin distinguir mayúsculas y minúsculas
Al configurarcase=Falsese puede lograr una coincidencia sin distinguir mayúsculas y minúsculas.
Ejemplo
# Crear una Series que contenga texto con diferentes mayúsculas y minúsculas
s = pd.Series(['Apple', 'APPLE', 'apple', 'Banana', 'APPLE'])
# Coincidencia distinguiendo mayúsculas y minúsculas
result_case = s.str.contains('APPLE')
# Coincidencia sin distinguir mayúsculas y minúsculas
result_nocase = s.str.contains('APPLE', case=False)
print("Serie original:")
print(s)
print("nCoincidencia distinguiendo mayúsculas y minúsculas 'APPLE':")
print(result_case)
print("nCoincidencia sin distinguir mayúsculas y minúsculas 'APPLE':")
print(result_nocase)
Resultado de salida:
原始 Series: 0 Apple 1 APPLE 2 apple 3 Banana 4 APPLE dtype: object 区分大小写匹配 'APPLE': 0 False 1 True 2 False 3 False 4 True 不区分大小写匹配 'APPLE': 0 True 1 True 2 True 3 False 4 True
Análisis del código:
case=True(Predeterminado) Distingue mayúsculas y minúsculas, solo coincide exactamente con 'APPLE'.case=FalseSin distinguir mayúsculas y minúsculas, 'Apple', 'APPLE' y 'apple' pueden coincidir.
Ejemplo 4: Manejo de valores faltantes
Mediante elnaparámetro se puede especificar cómo manejar los valores NaN.
Ejemplo
import numpy as np
# Crear una Series que contenga valores NaN
s = pd.Series(['apple', 'banana', np.nan, 'grape', None])
# Manejo predeterminado de NaN (devuelve NaN)
result_default = s.str.contains('ap')
# Especificar que devuelva False cuando hay NaN
result_na_false = s.str.contains('ap', na=False)
print("Serie original:")
print(s)
print("nManejo predeterminado (devuelve NaN):")
print(result_default)
print("nTratar NaN como False:")
print(result_na_false)
Resultado de salida:
原始 Series: 0 apple 1 banana 2 NaN 3 grape 4 None dtype: object 默认处理(返回 NaN): 0 True 1 False 2 NaN 3 True 4 NaN 将 NaN 视为 False: 0 True 1 False 2 False 3 True 4 False
Análisis del código:
- De forma predeterminada, NaN y None devuelven NaN.
- Configurando
na=Falsepuedes hacer que NaN se considere como no coincidente. - En el procesamiento de datos real, esto es muy útil y puede evitar problemas de filtrado causados por NaN.
Ejemplo 5: Filtrado de datos
contains()Se utiliza frecuentemente junto con la indexación booleana para filtrar datos.
Ejemplo
# Crear una Series simulada de datos de producto
products = pd.Series([
'iPhone 14 Pro',
'Samsung Galaxy S23',
'iPhone 13',
'Google Pixel 7',
'iPad Pro',
'MacBook Air',
'Dell XPS 15'
])
# Filtrar productos que contengan 'iPhone'
iphone_products = products[products.str.contains('iPhone')]
# Filtrar productos que no contengan 'i' (distinguiendo mayúsculas y minúsculas)
no_i_products = products[~products.str.contains('i')]
print("Todos los productos:")
print(products)
print("nProductos que contienen 'iPhone':")
print(iphone_products)
print("nProductos que no contienen la 'I' mayúscula:")
print(no_i_products)
Resultado de salida:
所有产品: 0 iPhone 14 Pro 1 Samsung Galaxy S23 2 iPhone 13 3 Google Pixel 7 4 iPad Pro 5 MacBook Air 6 Dell XPS 15 dtype: object 包含 'iPhone' 的产品: 0 iPhone 14 Pro 2 iPhone 13 dtype: object 不包含大写 'I' 的产品: 6 Dell XPS 15
Análisis del código:
products[products.str.contains('iPhone')]Filtra los productos que contienen 'iPhone'.~products.str.contains('i')Usando~la negación, se filtran los productos que no contienen 'i'.- Esta es una operación común en el filtrado de datos.
Precauciones
str.contains()Por defecto se utilizan expresiones regulares (regex=True)。- Si necesitas coincidir con cadenas normales (no como expresiones regulares), puedes configurar
regex=False。 - De forma predeterminada se distinguen mayúsculas y minúsculas. Usando
case=Falsese puede no distinguir entre mayúsculas y minúsculas. - De forma predeterminada, los valores NaN devuelven NaN, usando
nael parámetro se puede especificar el valor de retorno. - Esta función devuelve una Series de valores booleanos, que se puede usar directamente para filtrar datos con indexación booleana.
Otras extensiones
Funciones comunes de Pandas