Désolé, je viens juste de me mettre à Pandas, mais cette question semble être très simple. Comment puis-je utiliser le isin('X')
pour supprimer les lignes qui sont en la liste X
? En R, j'écrirais !which(a %in% b)
.
Réponses
Trop de publicités?Vous avez de nombreuses possibilités. En rassemblant certaines des réponses ci-dessus et les réponse acceptée de ce poste vous pouvez faire :
1. df[-df["column"].isin(["value"])]
2. df[~df["column"].isin(["value"])]
3. df[df["column"].isin(["value"]) == False]
4. df[np.logical_not(df["column"].isin(["value"]))]
Note : pour l'option 4, vous devrez import numpy as np
Mise à jour : Vous pouvez également utiliser le .query
pour cela aussi. Cela permet enchaînement de méthodes :
5. df.query("column not in @values")
.
où values
est une liste des valeurs que vous ne voulez pas inclure.
Vous pouvez utiliser numpy.logical_not
pour inverser le tableau booléen retourné par isin
:
In [63]: s = pd.Series(np.arange(10.0))
In [64]: x = range(4, 8)
In [65]: mask = np.logical_not(s.isin(x))
In [66]: s[mask]
Out[66]:
0 0
1 1
2 2
3 3
8 8
9 9
Comme indiqué dans le commentaire de Wes McKinney, vous pouvez également utiliser
s[~s.isin(x)]
Vous pouvez utiliser le DataFrame.select
méthode :
In [1]: df = pd.DataFrame([[1,2],[3,4]], index=['A','B'])
In [2]: df
Out[2]:
0 1
A 1 2
B 3 4
In [3]: L = ['A']
In [4]: df.select(lambda x: x in L)
Out[4]:
0 1
A 1 2