busque “no contiene” en un dataframe en pandas

He hecho algunas búsquedas y no puedo averiguar cómo filtrar un dataframe por df["col"].str.contains(word) , sin embargo, me pregunto si hay una manera de hacer lo contrario: filtrar un dataframe por el cumplido de ese set. Ej .: para el efecto de !(df["col"].str.contains(word)) .

¿Se puede hacer esto a través de un método DataFrame ?

Puede usar el operador invert (~) (que actúa como un no para datos booleanos):

 new_df = df[~df["col"].str.contains(word)] 

, donde new_df es la copia devuelta por RHS.

contiene también acepta una expresión regular …


Si lo anterior arroja un ValueError, la razón es probable porque tiene tipos de datos mixtos, así que use na=False :

 new_df = df[~df["col"].str.contains(word, na=False)] 

O,

 new_df = df[df["col"].str.contains(word) == False] 

También estaba teniendo problemas con el símbolo no (~), así que aquí hay otra forma de otro hilo de StackOverflow :

 df[df["col"].str.contains('this|that')==False] 

Tuve que deshacerme de los valores NULL antes de usar el comando recomendado por Andy anteriormente. Un ejemplo:

 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 

Ahora ejecutando el comando:

 ~df["second"].str.contains(word) 

Obtuve el siguiente error:

 TypeError: bad operand type for unary ~: 'float' 

Me deshice de los valores NULL usando dropna () o fillna () primero y reintenté el comando sin ningún problema.

Adicional a la respuesta de nanselm2, puedes usar 0 lugar de False :

 df["col"].str.contains(word)==0 

Puede usar Aplicar y Lambda para seleccionar filas donde una columna contenga cualquier cosa en una lista. Para su escenario:

 df[df["col"].apply(lambda x:x not in [word1,word2,word3])] 

Espero que las respuestas ya estén publicadas.

Estoy agregando el marco para encontrar varias palabras y negarlas de dataFrame .

Aquí 'word1','word2','word3','word4' = lista de patrones para buscar

df = DataFrame

column_a = Un nombre de columna de 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)]