python - from - pandas select rows by condition
Pandas DataFrame filter regex (2)
No entiendo el filter
DataFrame
pandas
.
Preparar
import pandas as pd
df = pd.DataFrame(
[
[''Hello'', ''World''],
[''Just'', ''Wanted''],
[''To'', ''Say''],
[''I/'m'', ''Tired'']
]
)
Problema
df.filter([0], regex=r''(Hel|Just)'', axis=0)
Esperaría que [0]
especificara la primera columna como la que se debe mirar y axis=0
para especificar las filas filtrantes. Lo que obtengo es esto:
0 1
0 Hello World
Yo estaba esperando
0 1
0 Hello World
1 Just Wanted
Pregunta
- ¿Qué me hubiera dado lo que esperaba?
Esto debería funcionar:
df[df[0].str.contains(''(Hel|Just)'', regex=True)]
Por los documentos ,
Los argumentos son mutuamente excluyentes, pero esto no se verifica
Entonces, parece que el primer argumento opcional, items=[0]
triunfa sobre el tercer argumento opcional, regex=r''(Hel|Just)''
.
In [194]: df.filter([0], regex=r''(Hel|Just)'', axis=0)
Out[194]:
0 1
0 Hello World
es equivalente a
In [201]: df.filter([0], axis=0)
Out[201]:
0 1
0 Hello World
que simplemente selecciona la (s) fila (s) con valores de índice en [0]
largo del eje 0.
Para obtener el resultado deseado, puede usar str.contains
para crear una máscara booleana y usar df.loc
para seleccionar filas:
In [210]: df.loc[df.iloc[:,0].str.contains(r''(Hel|Just)'')]
Out[210]:
0 1
0 Hello World
1 Just Wanted