2017-02-18 55 views
1

在我的數據集中,我的列名是可變的,所以我不知道它的名字和它發生的順序。 (不是出於選擇)如何區分「PASS」和「FAIL」作爲大熊貓的布爾值?

但是,使用DataFrame.all()函數,我可以得到布爾專用列(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.all.html)。

但是,我的列是'PASS'和'FAIL',而不是布爾值,我怎麼能識別它們?各種表格的

例子我會得到:

0 1 2 
A Pass 3 
B Fail 3 

0 1 2 
A qq Pass 
B nn Fail 

我希望我的函數返回[1]的情況下,1和的情況下,[2]

謝謝!

編輯:Dataframe.all()是不正確的意見。

+0

你的問題不清楚。請在問題中添加示例代碼。這將有助於瞭解你想要達到的目標。 –

+1

看來你誤解了'DataFrame.all()'的用途。它不會告訴你列是否有布爾值。它以布爾方式評估列(或行)的內容,並且如果所有**值都被評估,則返回'True'或'False'。它看起來像是有一列,處於未知位置,具有分類數據(最終轉換爲布爾值),並且您想要找到它。這是對的嗎? – iled

+0

哦,我明白了。是的,我試圖找到所有的布爾列。 –

回答

4

IIUC:

In [75]: df1 
Out[75]: 
    0  1 2 
0 A Pass 3 
1 B Fail 3 

In [76]: df2 
Out[76]: 
    0 1  2 
0 A qq Pass 
1 B nn Fail 

In [81]: df1.columns[df1.isin(['Pass','Fail']).all()] 
Out[81]: Index(['1'], dtype='object') 

In [82]: df2.columns[df2.isin(['Pass','Fail']).all()] 
Out[82]: Index(['2'], dtype='object') 

或使用.apply()

In [77]: df1.columns[df1.apply(lambda x: x.isin(['Pass','Fail']).all())] 
Out[77]: Index(['1'], dtype='object') 

In [78]: df2.columns[df2.apply(lambda x: x.isin(['Pass','Fail']).all())] 
Out[78]: Index(['2'], dtype='object') 

說明:

In [79]: df1.isin(['Pass','Fail']) 
Out[79]: 
     0  1  2 
0 False True False 
1 False True False 

In [80]: df1.isin(['Pass','Fail']).all() 
Out[80]: 
0 False 
1  True 
2 False 
dtype: bool 
+0

謝謝先生! :d –

1

這樣例如

>>> import pandas 
>>> df = pandas.DataFrame([ ("a","pass"), ("b","fail"), ("c","pass") ]) 
>>> df 
    0  1 
0 a pass 
1 b fail 
2 c pass 
>>> df[1] 
0 pass 
1 fail 
2 pass 
Name: 1, dtype: object 
>>> t = df[1]=="pass" 
>>> t 
0  True 
1 False 
2  True 
Name: 1, dtype: bool 
>>> t.all() 
False 
>>> 
+0

在這裏,您假定了布爾列的順序。我不知道它何時發生,也不知道它的名字。我只知道它在那裏有「通過」和「失敗」 –

+0

哦,所以你想識別與「通過」或「失敗」的列? – Copperfield