[python] 팬더의 DataFrame에서 “포함하지 않음”검색
몇 가지 검색을 수행하고로 데이터 프레임을 필터링하는 방법을 알 수 없지만 df["col"].str.contains(word)
그 반대로 수행하는 방법이 있는지 궁금합니다. 그 세트의 칭찬으로 데이터 프레임을 필터링하십시오. 예 :의 효과 !(df["col"].str.contains(word))
.
DataFrame
방법을 통해이 작업을 수행 할 수 있습니까 ?
답변
부울 데이터가 아닌 것처럼 작동하는 반전 (~) 연산자를 사용할 수 있습니다.
new_df = df[~df["col"].str.contains(word)]
, 어디 new_df
RHS에서 사본을 반환합니다.
또한 정규 표현식을 허용합니다 …
위의 방법으로 ValueError가 발생하면 데이터 유형이 혼합되어 있기 때문일 수 있습니다 na=False
.
new_df = df[~df["col"].str.contains(word, na=False)]
또는,
new_df = df[df["col"].str.contains(word) == False]
답변
not (~) 기호에도 문제가 있었으므로 다른 StackOverflow 스레드와 다른 방법이 있습니다 .
df[df["col"].str.contains('this|that')==False]
답변
Apply 및 Lambda를 사용하여 열에 목록에있는 항목이 포함 된 행을 선택할 수 있습니다. 시나리오의 경우 :
df[df["col"].apply(lambda x:x not in [word1,word2,word3])]
답변
위의 Andy가 권장하는 명령을 사용하기 전에 NULL 값을 제거해야했습니다. 예를 들면 :
df = pd.DataFrame(index = [0, 1, 2], columns=['first', 'second', 'third'])
df.ix[:, 'first'] = 'myword'
df.ix[0, 'second'] = 'myword'
df.ix[2, 'second'] = 'myword'
df.ix[1, 'third'] = 'myword'
df
first second third
0 myword myword NaN
1 myword NaN myword
2 myword myword NaN
이제 명령을 실행하십시오.
~df["second"].str.contains(word)
다음과 같은 오류가 발생합니다.
TypeError: bad operand type for unary ~: 'float'
dropna () 또는 fillna ()를 사용하여 NULL 값을 먼저 제거하고 문제없이 명령을 다시 시도했습니다.
답변
답변이 이미 게시 되었기를 바랍니다.
여러 단어 를 찾고 dataFrame에서 그 단어를 무효화 하기 위해 프레임 워크를 추가하고 있습니다.
여기 'word1','word2','word3','word4'
= 검색 할 패턴 목록
df
= 데이터 프레임
column_a
= DataFrame df의 열 이름
Search_for_These_values = ['word1','word2','word3','word4']
pattern = '|'.join(Search_for_These_values)
result = df.loc[~(df['column_a'].str.contains(pattern, case=False)]
답변
nanselm2의 답변 외에도 다음 0
대신 사용할 수 있습니다 False
.
df["col"].str.contains(word)==0