Chciałbym wyczyścić filtrowanie ramki danych za pomocą wyrażeń regularnych w jednej z kolumn.Jak odfiltrować wiersze w pandach przez regex
na dobry przykład:
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
chcę odfiltrować wiersze do tych, które zaczynają się f
za pomocą wyrażenia regularnego. Najpierw:
In [213]: foo.b.str.match('f.*')
Out[213]:
0 []
1 ()
2 ()
3 []
To niezbyt użyteczne. Jednak to dostanie mi logiczną index:
In [226]: foo.b.str.match('(f.*)').str.len() > 0
Out[226]:
0 False
1 True
2 True
3 False
Name: b
Więc mogłem wtedy zrobić mój ograniczenie przez:
In [229]: foo[foo.b.str.match('(f.*)').str.len() > 0]
Out[229]:
a b
1 2 foo
2 3 fat
to sprawia, że sztucznie umieścić grupy w regex, choć i wydaje się może nie czysty sposób, aby przejść. Czy jest lepszy sposób to zrobić?
Jeśli nie przywiązane do regexes, 'foo [foo.b.str.startswith ("f")] 'zadziała. – DSM
IMHO Myślę, że 'foo [foo.b.str.match ('(f. *)'). Str.len()> 0]' jest dość dobrym rozwiązaniem! Bardziej konfigurowalny i użyteczny niż startswith, ponieważ zawiera w sobie wszechstronność regexu. –