Я хотів би чисто фільтрувати кадр даних, використовуючи регулярний вираз на одному з стовпців.
Для надуманого прикладу:
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
Я хочу відфільтрувати рядки до тих, які починаються з f
використання регулярного вираження. Перше:
In [213]: foo.b.str.match('f.*')
Out[213]:
0 []
1 ()
2 ()
3 []
Це не надто страшно корисно. Однак це отримає мій булевий індекс:
In [226]: foo.b.str.match('(f.*)').str.len() > 0
Out[226]:
0 False
1 True
2 True
3 False
Name: b
Тож я міг би зробити своє обмеження:
In [229]: foo[foo.b.str.match('(f.*)').str.len() > 0]
Out[229]:
a b
1 2 foo
2 3 fat
Це змушує мене штучно помістити групу в регекс, і, здається, можливо, це не чистий шлях. Чи є кращий спосіб зробити це?
foo[foo.b.str.match('(f.*)').str.len() > 0]
, що це досить хороше рішення! Більш настроюваний і корисний, ніж startwith, тому що він пакує універсальність регулярного вираження в ньому.
foo[foo.b.str.match('f.*')]
працює в пандах 0,24,2 для мене.
foo[foo.b.str.startswith("f")]
буде працювати.