J’ai fait quelques recherches et je n’arrive pas à comprendre comment filtrer un dataframe par df["col"].str.contains(word)
, mais je me demande s’il existe un moyen de faire l’inverse: filtrer un dataframe par le compliment de cet ensemble. ex: à l’effet de !(df["col"].str.contains(word))
.
Cela peut-il être fait par une méthode DataFrame
?
Vous pouvez utiliser l’opérateur invert (~) (qui agit comme un non pour les données booléennes):
~df["col"].str.contains(word)
contains accepte également une expression régulière …
J’avais aussi des problèmes avec le symbole not (~), alors voici une autre façon de partir d’un autre thread StackOverflow :
df[df["col"].str.contains('this|that')==False]
J’ai dû me débarrasser des valeurs NULL avant d’utiliser la commande recommandée par Andy ci-dessus. Un exemple:
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
Maintenant en cours d’exécution la commande:
~df["second"].str.contains(word)
Je reçois l’erreur suivante:
TypeError: bad operand type for unary ~: 'float'
Je me suis débarrassé des valeurs NULL en utilisant dropna () ou fillna () en premier et j’ai répété la commande sans problème.