2015-10-07 66 views

回答

3

據我所知,沒有直接的功能來測試這個。相反,您需要根據數據的編碼方式(例如1/0,T/F,True/False等)構建一些東西。另外,如果你的列有一個缺失值,整個列將被編碼爲一個float而不是int。

在下面的例子中,我測試所有唯一的非空值是'1'還是'0'。它返回所有這些列的列表。

df = pd.DataFrame({'bool': [1, 0, 1, None], 
        'floats': [1.2, 3.1, 4.4, 5.5], 
        'ints': [1, 2, 3, 4], 
        'str': ['a', 'b', 'c', 'd']}) 

bool_cols = [col for col in df 
      if df[[col]].dropna().unique().isin([0, 1]).all().values] 

>>> bool_cols 
['bool'] 

>>> df[bool_cols] 
    bool 
0  1 
1  0 
2  1 
3 NaN 
+0

感謝@Alexander。成功了! – na899

+0

除''.unique()'外,其他作品從0.18.1開始看起來都不是有效的。 一個有點隱藏的技巧是,它適用於顯式布爾值的列,即'False','True',而不僅僅是'0'和'1'。這是因爲python顯然會自動投射; '[0,1]中的錯誤'返回'真' – ijoseph

0

要在答案擴大正上方,用value_counts()指數,而不是唯一的()應該做的伎倆:

bool_cols = [col for col in df if 
       df[col].dropna().value_counts().index.isin([0,1]).all()] 
相關問題