У меня есть фрейм данных pandas с большим количеством столбцов, и мне нужно найти, какие столбцы являются двоичными (только с значениями 0 или 1), не глядя на данные. Какую функцию следует использовать?Какие столбцы являются двоичными в Pandas DataFrame?
0
A
ответ
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
Чтобы расширить ответ чуть выше, используя value_counts() индекс вместо уникальной() следует сделать трюк:.
bool_cols = [col for col in df if
df[col].dropna().value_counts().index.isin([0,1]).all()]
Спасибо @Alexander. Работал! – na899
Работает, за исключением '.unique()', похоже, не действует с '0.18.1'. Один из немногих скрытых трюков заключается в том, что это работает для столбцов, которые явно булевы, то есть 'False',' True', а не только '0' и' 1'. Это связано с тем, что python, по-видимому, автоматически отбрасывает; 'False в [0,1]' возвращает 'True' – ijoseph