如果Pandas数据帧中的任何列在某一行中包含特定值,则删除该行

14

如果我们想要删除某一行,其中任何一列存在缺失值,我们可以这样做:

df.dropna(axis = 0, how = 'any', inplace = True)

如果我们想要删除一行中的任何列具有特定值(比如说,一列具有值“turtle”),我们该如何做呢?

假设某行的某个列包含“turtle”,那么我们就会删除这行。

2个回答

17

演示:

示例数据框:

In [7]: import string

In [8]: df = pd.DataFrame(np.random.randint(100, size=(10,10)), columns=list(string.ascii_letters[:10]))

In [9]: df
Out[9]:
    a   b   c   d   e   f   g   h   i   j
0  95  79  14  64  97   3   0  49  84   2
1  52  82  72  40  55  26  21  69   2  35
2  30  63  27  63  14  23  70  62  83  80
3  23  90  96  43  75  23  27  47  83  40
4  82  87  63  37  36  58  88  18  50  29
5  92  29  93   6  62  85  87  74  21  32
6  23  64  19  22  50  86  51  93  46   1
7  56   0   8  46   1  56  82  15  55  45
8  67  35  83  65  63  58  48  85  75  90
9  12   7  45  28  33  98  42  93  78  12

让我们删除所有至少包含一个 0 的行:

In [10]: df.eq(0)
Out[10]:
       a      b      c      d      e      f      g      h      i      j
0  False  False  False  False  False  False   True  False  False  False
1  False  False  False  False  False  False  False  False  False  False
2  False  False  False  False  False  False  False  False  False  False
3  False  False  False  False  False  False  False  False  False  False
4  False  False  False  False  False  False  False  False  False  False
5  False  False  False  False  False  False  False  False  False  False
6  False  False  False  False  False  False  False  False  False  False
7  False   True  False  False  False  False  False  False  False  False
8  False  False  False  False  False  False  False  False  False  False
9  False  False  False  False  False  False  False  False  False  False

In [11]: res = df[~df.eq(0).any(1)]

In [12]: res
Out[12]:
    a   b   c   d   e   f   g   h   i   j
1  52  82  72  40  55  26  21  69   2  35
2  30  63  27  63  14  23  70  62  83  80
3  23  90  96  43  75  23  27  47  83  40
4  82  87  63  37  36  58  88  18  50  29
5  92  29  93   6  62  85  87  74  21  32
6  23  64  19  22  50  86  51  93  46   1
8  67  35  83  65  63  58  48  85  75  90
9  12   7  45  28  33  98  42  93  78  12

等价地,df[df.ne(0).all(1)] - jpp
1
@jpp,是的,它是。 - MaxU - stand with Ukraine
1
只是为了这个重复问题添加一条注释 :)。 - jpp

7

既然你知道如何使用dropnan,那么你可以将其替换为NaN。

df=df.replace('Yourvalue',np.nan).dropna(axis = 0, how = 'any')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接