2015-10-07 5 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, по-видимому, автоматически отбрасывает; 'False в [0,1]' возвращает 'True' – ijoseph

0

Чтобы расширить ответ чуть выше, используя value_counts() индекс вместо уникальной() следует сделать трюк:.

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