Я хотел бы чисто отфильтровать фрейм данных с помощью регулярных выражений в одном из столбцов.
Для надуманного примера:
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]
, это довольно хорошее решение! Более настраиваемый и полезный, чем начальный с, потому что он содержит в себе универсальность регулярных выражений.
foo[foo.b.str.match('f.*')]
меня линия работает в пандах 0.24.2.
foo[foo.b.str.startswith("f")]
будет работать.