2 回答

TA贡献1816条经验 获得超6个赞
您可以通过正则表达式和对两列执行此操作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
该模式不区分大小写。

TA贡献1806条经验 获得超8个赞
对我来说,这非常有效。由于您没有给出确切的 csv 格式,我假设它会是这样的:
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)
生成的数据框如下所示:
Date Checked Verified
0 2018-05-23 False True
1 2018-05-24 True True
2 2018-05-26 False True
3 2018-05-31 False False
4 2019-12-01 True True
5 2019-12-05 True True
6 2019-12-15 True False
7 2019-12-23 False False
您使用哪个 python 和 pandas 版本?我用 Python 3.6.1 和 Pandas 1.04 测试了这个
添加回答
举报