반응형
pandas에서 문자열에 목록의 하위 문자열 중 하나가 포함되어 있는지 테스트하는 방법은 무엇입니까?
df.isin()
및 의 조합에 해당하는 기능이 df[col].str.contains()
있습니까?
예를 들어, I has the series s = pd.Series(['cat','hat','dog','fog','pet'])
, I want to find all places where s
any of ['og', 'at']
, I would want to get all but all of 'pet'.
나는 해결책이 있지만 다소 우아하지 않습니다.
searchfor = ['og', 'at']
found = [s.str.contains(x) for x in searchfor]
result = pd.DataFrame[found]
result.any()
이 작업을 수행하는 더 좋은 방법이 있습니까?
한 가지 옵션은 정규식 |
문자 를 사용 하여 시리즈의 단어에있는 각 하위 문자열을 일치시키는 것입니다 s
(여전히 사용 str.contains
).
다음 searchfor
과 같이 단어를 결합하여 정규식을 구성 할 수 있습니다 |
.
>>> searchfor = ['og', 'at']
>>> s[s.str.contains('|'.join(searchfor))]
0 cat
1 hat
2 dog
3 fog
dtype: object
@AndyHayden 아래 코멘트에 언급 한 바와 같이 귀하의 문자열과 같은 특수 문자가있는 경우, 알아서 $
하고 ^
말 그대로 일치합니다. 이러한 문자는 정규식 컨텍스트에서 특정 의미를 가지며 일치에 영향을줍니다.
다음을 사용하여 영숫자가 아닌 문자를 이스케이프하여 하위 문자열 목록을 더 안전하게 만들 수 있습니다 re.escape
.
>>> import re
>>> matches = ['$money', 'x^y']
>>> safe_matches = [re.escape(m) for m in matches]
>>> safe_matches
['\\$money', 'x\\^y']
이 새 목록에있는 문자열은와 함께 사용할 때 문자 그대로 각 문자와 일치합니다 str.contains
.
다음을 사용 str.contains
하여 정규식 패턴과 함께 단독으로 사용할 수 있습니다 OR (|)
.
s[s.str.contains('og|at')]
또는 dataframe
다음을 사용 하여 시리즈를 추가 할 수 있습니다 str.contains
.
df = pd.DataFrame(s)
df[s.str.contains('og|at')]
산출:
0 cat
1 hat
2 dog
3 fog
반응형
'programing' 카테고리의 다른 글
Ruby의 외부 프로세스 STDOUT에서 지속적으로 읽기 (0) | 2020.09.18 |
---|---|
Twitter Bootstrap 3에서 반응 형 기능을 제거하는 방법은 무엇입니까? (0) | 2020.09.18 |
새 JSON 데이터로 데이터 테이블 테이블을 수동으로 업데이트하는 방법 (0) | 2020.09.18 |
내 Visual Studio 2017 팀 탐색기 패널에서 원격 분기 목록을 어떻게 새로 고칠 수 있습니까? (0) | 2020.09.18 |
동일한 출력을 생성하는 JavaScript의 encodeURIComponent에 해당하는 Java? (0) | 2020.09.18 |