尝试将数据(csv文件中的字符串格式)转换为布尔值(在数据帧中),我“丢失”了有关其原始值的信息,因此现在所有值都是布尔值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视为真实。为什么我只能得到错误的值?你知道我该怎么修吗
原始数据集和代码示例:
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
代码
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
)
对我来说,这非常有效。由于您没有给出确切的csv格式,我假设它是这样的:
然后我调用了代码,就像你那样:
生成的数据帧如下所示:
您使用哪种python和pandas版本? 我用Python 3.6.1和Pandas 1.04对此进行了测试
您可以通过正则表达式和
df.replace
对这两个列执行此操作:该模式不区分大小写
相关问题 更多 >
编程相关推荐