[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


답변