python - 选择具有布尔值但未被 Pandas 识别为布尔值的列
问题描述
我正在尝试将数据集子集到另一个只有布尔数据字段(真/假)的数据框中。最好的方法是通过 bool dtype 对数据帧进行子集化;但是,我在数据框中有 NA 值,因此 pandas 不会将这些列识别为布尔值。我还尝试对“真”(字符串)值或真值(布尔值)应用过滤器,但无济于事。有什么想法吗?
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']})
所需的输出是:
df1 = pd.DataFrame({'Data': [np.nan, 'False', 'True', 'True'],
'Graph': [np.nan, 'True', 'False', 'False'],
'ML': [np.nan, 'False', 'True', 'True']})
解决方案
这不是因为你有 Na 值(即使有 Na 值,熊猫也可以推断出对象类型),你的问题是因为你有 Strings 而不是 bools
如果你的 df 是这样的:
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]})
比 pandas 会自动将 "Data" 、 "Graph" 和 "ML" 推断为布尔值:
df.Data == True
0 False
1 False
2 True
3 True
Name: Data, dtype: bool
在创建数据框之前尝试将“真”转换为真
因此,您可以尝试使用此解决方案仅将布尔列从 string 转换为 boolean :
from distutils.util import strtobool
def str_to_bool(x):
try :
return bool(strtobool(x))
except :
return x
data = {
'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']}
new_data = {k: list(map(lambda x : str_to_bool(x), v )) for k, v in data.items() }
df = pd.DataFrame(new_data)
正如您现在看到的那样,数据列是一个布尔值:
df.Data==True
0 False
1 False
2 True
3 True
Name: Data, dtype: bool
推荐阅读
- pimcore - 如何将 PimcoreMember 捆绑包的用户与 CoreShop 集成?
- javascript - 反应渲染正在使用新旧状态值,而不仅仅是新值
- swift - 为什么我的二元运算符不能应用于正确键入的操作数?
- utf-8 - 使用 AES 解密
- python - 部分字符串匹配和 vlookup
- mysql - 如何从winForm输入希伯来语到mySql
- c - BPF:结构__skbuff中的标记不可写?
- java - 异常处理 - 捕获多个未按预期工作的异常
- reactjs - 当我将参数作为道具传递时,我的功能有效,但是当我手动设置数字时,找不到该项目
- python - 性能随着数组元素嵌套的增加而降低