python - 将字符串转换为布尔值仅给出 False 值
问题描述
尝试将数据(来自 csv 文件的字符串格式)转换为布尔值(在数据框中),我已经“丢失”了有关其原始值的信息,所以现在所有值都是 boolean False
。
我试图更改为布尔值的列如下:
df['Col1'] =df['Col1'].astype('bool')
df['Col2'] =df['Col2'].astype('bool')
我也试过
df.Col1 = np.where(df.Col1.eq('true'), True, False)
df. Col2 = np.where(df.Col2.eq('true') | df.Col2.eq('tbc'), True, False)
每列 Col1 和 Col2 的唯一值是:
Col1: array([true, false, nan], dtype=object)
Col2: array(['true', 'false', 'tbc', nan], dtype=object)
我的原始数据集具有以下值。
Col1 Col2
true true
true true
false false
nan false
false true
true tbc
尽管它们被转换为布尔值,但所有值都是 False:
Col1 Col2
False False
False False
False False
False False
False False
False False
我想将 TBC 视为 True。为什么我只得到 False 值?关于如何修复它的任何想法?
原始数据集和代码示例:
Date Checked Verified
2018-05-23 FALSE TRUE
2018-05-24 TRUE TBC
2018-05-26 FALSE TBC
2018-05-31 nan nan
2019-12-01 TRUE TRUE
2019-12-05 TRUE TBC
2019-12-15 TRUE FALSE
2019-12-23 FALSE nan
代码
读取文件 csv:
df=pd.read_csv(path, sep=';', engine='python')
转换为小写
df= df.apply(lambda x: x.astype(str).str.lower())
将字符串转换为布尔值
df['Checked'] = np.where(df['Checked'].eq('true'), True, False)
df['Verified'] = np.where(df['Verified'].eq('true') | df['Verified'].eq('tbc'), True, False)
然后我测试有多少行有值 Checked = True:
len(df[df['Checked']=='true'])
输出:153
转换为布尔检查:
df['Checked'] = np.where(df['Checked'].eq('true'), True, False)
len(df[df['Checked']==True])
输出:153
转换Verified
为布尔值:
df['Verified'] = np.where(df['Verified'].eq('true') | df['Verified'].eq('tbc'), True, False)
len(df[df['Verified']==True])
输出:(0
预期60
)
解决方案
您可以通过正则表达式和df.replace
:
df.astype(str).replace({'(?i)True|TBC': True, '(?i)False|nan': False}, regex=True)
Col1 Col2
0 True True
1 True True
2 False False
3 False False
4 False True
5 True True
该模式不区分大小写。
推荐阅读
- c++ - 如何抛出“模板参数”类型的异常?
- chef-infra - 如何使用厨师食谱在文件中间插入节
- bash - 尝试从 xentop grep 和 awk CPU % 时输出不同
- vba - VBA - 将幻灯片母版中的项目符号样式应用于选定的文本框
- mathjs - mathjs 有 null 或 undefined 的概念吗?
- c++ - MPI 生成前 20 个数字
- javascript - 我应该如何在之前(在不同的函数中)引用 an 元素,并在新函数中修改它?
- node.js - NodeJs - 如何在谷歌云平台上部署我的应用程序的更新版本
- linux - sh 脚本不与 Crontab 一起运行,而是手动运行
- sql-server - 创建表 6 x 6 并从上线自动溢出