2015-10-07 54 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()] 
相关问题