J'ai fait quelques recherches et je ne vois pas comment filtrer une image par df["col"].str.contains(Word)
, mais je me demande s'il existe un moyen de faire l'inverse: filtrer une image par le complément de cet ensemble. par exemple: à l'effet de !(df["col"].str.contains(Word))
.
Cela peut-il être fait via une méthode DataFrame
?
Vous pouvez utiliser l'opérateur invert (~) (qui agit comme un non pour les données booléennes):
new_df = df[~df["col"].str.contains(Word)]
, où new_df
est la copie renvoyée par RHS.
contient également accepte une expression régulière ...
Si ce qui précède renvoie ValueError, c'est probablement parce que vous avez mélangé des types de données, utilisez donc na=False
:
new_df = df[~df["col"].str.contains(Word, na=False)]
Ou,
new_df = df[df["col"].str.contains(Word) == False]
J'avais aussi des problèmes avec le symbole not (~), alors voici un autre moyen de choisir un autre fil StackOverflow :
df[df["col"].str.contains('this|that')==False]
Vous pouvez utiliser Apply et Lambda pour sélectionner des lignes dans lesquelles une colonne contient un élément quelconque dans une liste. Pour votre scénario:
df[df["col"].apply(lambda x:x not in [Word1,Word2,Word3])]
Je devais 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, lancez 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éessayé la commande sans problème.
J'espère que les réponses sont déjà postées
J'ajoute le cadre pour trouver plusieurs mots et nier ceux de dataFrame.
Ici 'Word1','Word2','Word3','Word4'
= liste des motifs à rechercher
df
= DataFrame
column_a
= Nom de colonne provenant 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)]
En plus de la réponse de nanselm2, vous pouvez utiliser 0
au lieu de False
:
df["col"].str.contains(Word)==0