열 중 하나에서 정규 표현식을 사용하여 데이터 프레임을 깨끗하게 필터링하고 싶습니다.
고안된 예 :
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
그래도 인위적으로 정규식에 그룹을 넣을 수 있으며 깨끗한 방법이 아닌 것 같습니다. 더 좋은 방법이 있습니까?
IMHO 나는
—
tumultous_rooster 1
foo[foo.b.str.match('(f.*)').str.len() > 0]
꽤 좋은 해결책 이라고 생각 합니다! 정규식의 다양한 기능을 제공하기 때문에 시작보다 더 사용자 정의 가능하고 유용합니다.
약간 늦었지만 최신 버전의 팬더에서는 문제가 해결되었습니다. 이 선
—
Behzad Mehrtash
foo[foo.b.str.match('f.*')]
은 팬더 0.24.2에서 작동합니다.
foo[foo.b.str.startswith("f")]
작동합니다.