Vorrei filtrare in modo pulito un dataframe usando espressioni regolari su una delle colonne.Come filtrare le righe in Panda per regex
Per un esempio inventato:
In [210]: foo = pd.DataFrame({'a' : [1,2,3,4], 'b' : ['hi', 'foo', 'fat', 'cat']})
In [211]: foo
Out[211]:
a b
0 1 hi
1 2 foo
2 3 fat
3 4 cat
voglio filtrare le righe a quelli che iniziano con f
utilizzando un'espressione regolare. Prima vai:
In [213]: foo.b.str.match('f.*')
Out[213]:
0 []
1 ()
2 ()
3 []
Questo non è troppo terribilmente utile. Tuttavia questo mi otterrà il mio indice booleano:
In [226]: foo.b.str.match('(f.*)').str.len() > 0
Out[226]:
0 False
1 True
2 True
3 False
Name: b
così ho potuto poi fare la mia restrizione:
In [229]: foo[foo.b.str.match('(f.*)').str.len() > 0]
Out[229]:
a b
1 2 foo
2 3 fat
Questo mi fa mettere artificialmente un gruppo nella regex però, e sembra che forse non il pulito modo di andare. C'è un modo migliore per farlo?
Se non sei sposata a regex, 'foo [foo.b.str.startswith ("f")] 'funzionerà. – DSM
IMHO Penso che 'foo [foo.b.str.match ('(f. *)'). Str.len()> 0]' è una soluzione abbastanza buona! Più personalizzabile e utile di startswith perché racchiude in sé la versatilità della regex. –