2016-10-22 89 views
1

我已經導入了一個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

您可以使用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 

UPDATE:有條件地選擇列:

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 
+0

謝謝。所以..任何()或任何(0)而不是任何(1)會告訴我,如果這些值是在任何列而不是行? – 85sph

+0

那麼我將如何去除包含值但不包含行的列?我沒有理由這樣做,但我現在很感興趣。 – 85sph

+0

@ 85sph,更新了我的答案... – MaxU