Mi DataFrame tiene dos columnas:
Name Status a I am Good b Goodness!!! c Good is what i feel d Not Good-at-all
Quiero filtrar las filas en las que Status tiene una cadena “Buena” como su palabra exacta, no combinada con ninguna otra palabra o carácter.
Así que la salida será:
Name Status ai am Good c Good is what i feel
Otras dos filas tenían una cadena ‘Buena’, pero se mezclaban con otros caracteres, por lo que no deberían recogerse.
Intenté hacer:
d = df[df['Status'].str.contains('Good')] # But all rows come up
Creo que algunas expresiones regulares como (r'\bGood\b', Status)
harán eso, pero esto no es capaz de resumirlas juntas. ¿Y cómo / dónde exactamente puedo ajustar la expresión regular en una condición de filtro DataFrame para lograr esto? ¿Y cómo lograr los startswith
o ” endswith
” (búsqueda exacta de palabras)?
Si está definiendo “exacto” para que no signifique ningún otro carácter (incluida la puntuación que define el límite de una palabra \b
), en su lugar, puede verificar si hay un espacio al principio y al final y / o los anclajes de inicio / final:
>>> df[df['Status'].str.contains(r'(?:\s|^)Good(?:\s|$)')] Name Status 0 a I am Good 2 c Good is what i feel
Explicación:
(?:\s|^)
es un grupo sin captura que busca un carácter de espacio ( \s
) o el principio de la cadena ( ^
).
Good
es la palabra que estás buscando.
(?:\s|$)
es un grupo no capturador que busca un carácter de espacio ( \s
) o el final de la cadena ( $
).