如果任何列包含所述行中的某个值,则在Pandas Dataframe中删除一行

时间:2017-12-20 22:02:12

标签: python pandas dataframe

如果我们想要删除任何列缺少值的行,我们可以这样做:

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

如果我们想要删除该行中任何一列具有特定值的行(如果列的值为" turtle"),我们如何做同样的事情?

第x行的某些列包含" turtle"所以我们放弃它。

2 个答案:

答案 0 :(得分:8)

演示:

样本DF:

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

答案 1 :(得分:2)

因为你知道,如何dropnan,你可以replace到NaN

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