pandas - 删除包含特定值的行

时间:2016-10-22 19:12:26

标签: python pandas

我导入了一个csv文件,每个列都与调查中提出的问题的响应有关。如果回复是'不适用'值为-8,如果没有答案,则值为-9。对于任何问题,我想删除包含-8或-9值的所有行。

我如何使用熊猫来解决这个问题?

例如

GRSSWK  HAPPY   HIQUL11D    MARDY6  MARSTA  PUBLICR QHEALTH1    RELIG11
-9       9      -9          2       5       -9      -9          2
-9       8      -9          2       5       -9      -9          2
-9      -9      -9          2       4       -9       4          2
481      8       1          1       2        2       3          2
885     -9       1          1       2        2       1          2

只剩下第四行。

1 个答案:

答案 0 :(得分:2)

您可以使用DataFrame.isin()方法:

In [34]: x
Out[34]:
   GRSSWK  HAPPY  HIQUL11D  MARDY6  MARSTA  PUBLICR  QHEALTH1  RELIG11
0      -9      9        -9       2       5       -9        -9        2
1      -9      8        -9       2       5       -9        -9        2
2      -9     -9        -9       2       4       -9         4        2
3     481      8         1       1       2        2         3        2
4     885     -9         1       1       2        2         1        2

In [38]: x = x.ix[~x.isin([-9, -8]).any(1)]

In [39]: x
Out[39]:
   GRSSWK  HAPPY  HIQUL11D  MARDY6  MARSTA  PUBLICR  QHEALTH1  RELIG11
3     481      8         1       1       2        2         3        2

说明:

In [42]: x.isin([-9, -8])
Out[42]:
  GRSSWK  HAPPY HIQUL11D MARDY6 MARSTA PUBLICR QHEALTH1 RELIG11
0   True  False     True  False  False    True     True   False
1   True  False     True  False  False    True     True   False
2   True   True     True  False  False    True    False   False
3  False  False    False  False  False   False    False   False
4  False   True    False  False  False   False    False   False

In [43]: x.isin([-9, -8]).any(1)
Out[43]:
0     True
1     True
2     True
3    False
4     True
dtype: bool

更新:有条件地选择列:

In [86]: x[x.columns[~x.isin([-9, -8]).any()]]
Out[86]:
   MARDY6  MARSTA  RELIG11
0       2       5        2
1       2       5        2
2       2       4        2
3       1       2        2
4       1       2        2

说明:

In [87]: x.columns[~x.isin([-9, -8]).any()]
Out[87]: Index(['MARDY6', 'MARSTA', 'RELIG11'], dtype='object')

In [88]: x.isin([-9, -8]).any()
Out[88]:
GRSSWK       True
HAPPY        True
HIQUL11D     True
MARDY6      False
MARSTA      False
PUBLICR      True
QHEALTH1     True
RELIG11     False
dtype: bool