web-dev-qa-db-fra.com

Supprimer les lignes non .isin ('X')

Désolé juste d'entrer dans Pandas, cela semble être une question très simple. Comment puis-je utiliser la isin('X') pour supprimer les lignes qui sont dans la liste X? Dans R, j'écrirais !which(a %in% b).

51
DrewH

Vous pouvez utiliser numpy.logical_not pour inverser le tableau booléen renvoyé 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)]
62
bmu

Vous avez plusieurs options. En rassemblant certaines des réponses ci-dessus et le réponse acceptée de ce post 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"]))]

Remarque: pour l'option 4, vous devrez import numpy as np

59
Jonny Brooks

Tout ce que vous avez à faire est de créer un sous-ensemble de votre trame de données où la méthode isin est évaluée à False:

df = df[df['Column Name'].isin(['Value']) == False]
12
atm

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
4
Andy Hayden