首页 > 解决方案 > 将字符串转换为布尔值仅给出 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

标签: pythonpandasdataframe

解决方案


您可以通过正则表达式和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

该模式不区分大小写。


推荐阅读