如何筛选Pandas中未被识别为布尔类型的布尔值列
解决方案
你的场景中目标列包含np.nan和字符串格式的'True'/'False',不属于标准布尔dtype,因此无法直接按数据类型筛选,可通过自定义列校验规则实现筛选。
完整实现代码
import pandas as pd import numpy as np # 构造示例数据 df = pd.DataFrame({ 'RefID': [1, 2, 3, 4], 'Lastname': ['Bluejay', 'Westie', 'Tiger', 'Dodo'], 'Firstname': ['Cantankerous', 'Joy', 'Fifi', 'Mo'], 'Age': [4, 24, 3, 11], 'Data': [np.nan, 'False', 'True', 'True'], 'Graph': [np.nan, 'True', 'False', 'False'], 'ML': [np.nan, 'False', 'True', 'True'] }) # 自定义列校验规则:判断非空值是否都是'True'/'False' def is_bool_like(col): non_na_values = col.dropna() # 全空列可根据需求调整返回值 if len(non_na_values) == 0: return False return non_na_values.isin({'True', 'False'}).all() # 筛选符合条件的列 df1 = df.loc[:, df.apply(is_bool_like)] # 可选:转换为Pandas可空布尔类型,支持NA值,后续可直接按布尔dtype筛选 # df1 = df1.replace({'True': True, 'False': False}).astype('boolean')
结果验证
输出df1即可得到你需要的子DataFrame,仅保留Data、Graph、ML三列。
内容的提问来源于stack exchange,提问作者StackSpin
相关产品推荐
相关产品推荐

