我导入了一个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
只剩下第四行。
答案 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