Nuestros programadores estrellas agotaron sus provisiones de café, por su búsqueda a tiempo completo por la respuesta, hasta que Olivia encontró el resultado en Gitea y ahora la compartimos aquí.
Solución:
los Series.str.contains
El método espera un patrón de expresión regular (por defecto), no un literal string. Por lo tanto str.contains("^")
coincide con el comienzo de cualquier string. Desde cada string tiene un comienzo, todo coincide. En su lugar, use str.contains("^")
para que coincida con el literal ^
personaje.
Para verificar cada columna, puede usar for col in df
para iterar a través de los nombres de las columnas, y luego llamar str.contains
en cada columna:
mask = np.column_stack([df[col].str.contains(r"^", na=False) for col in df])
df.loc[mask.any(axis=1)]
Alternativamente, podrías pasar regex=False
para str.contains
para hacer la prueba usa Python in
operador; pero (en general) usar expresiones regulares es más rápido.
Prueba con:
df.apply(lambda row: row.astype(str).str.contains('TEST').any(), axis=1)
Aquí hay una función para resolver el problema de realizar búsquedas de texto en todas las columnas de un marco de datos df
:
def search(regex: str, df, case=False):
"""Search all the text columns of `df`, return rows with any matches."""
textlikes = df.select_dtypes(include=[object, "string"])
return df[
textlikes.apply(
lambda column: column.str.contains(regex, regex=True, case=case, na=False)
).any(axis=1)
]
Se diferencia de las respuestas existentes por permanecer en la API de pandas y adoptar que pandas es más eficiente en el procesamiento de columnas que en el procesamiento de filas. Además, esto está empaquetado como una función pura 🙂
Documentos relevantes:
- Marco de datos.aplicar
- El descriptor de acceso .str
- DataFrame.cualquiera
Si haces scroll puedes encontrar las acotaciones de otros creadores, tú incluso tienes la habilidad insertar el tuyo si te apetece.