Как фильтровать строки в пандах по регулярному выражению

Я хотел бы аккуратно отфильтровать фрейм данных, используя регулярное выражение в одном из столбцов.

Для надуманного примера:

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

Это заставляет меня искусственно помещать группу в регулярное выражение, хотя и кажется как, возможно, не чистый путь. Есть ли лучший способ сделать это?

142
задан rypel 9 April 2016 в 18:08
поделиться