na8*_*899 4 python numpy pandas
我有一个包含大量列的pandas数据帧,我需要查找哪些列是二进制的(仅值0或1)而不查看数据.应该使用哪个功能?
据我所知,没有直接的功能来测试这个.相反,您需要根据数据的编码方式构建一些东西(例如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]
# 2019-09-10 EDIT (per Hardik Gupta)
bool_cols = [col for col in df
if np.isin(df[col].dropna().unique(), [0, 1]).all()]
>>> bool_cols
['bool']
>>> df[bool_cols]
bool
0 1
1 0
2 1
3 NaN
Run Code Online (Sandbox Code Playgroud)
小智 6
def is_binary(series, allow_na=False):
if allow_na:
series.dropna(inplace=True)
return sorted(series.unique()) == [0, 1]
Run Code Online (Sandbox Code Playgroud)
这是我找到的最有效的解决方案。它比上面的答案更快。在处理大型数据集时,时间差异变得重要。