热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在单个np.where条件中使用多个值?

我有一个如下所示的数据框df=pd.DataFrame({text:[Hihow,Iamfine,IlasayHi,hello

我有一个如下所示的数据框

df = pd.DataFrame({'text': ["Hi how","I am fine","Ila say Hi","hello"],
'tokens':["test","correct","Tim",np.nan],
'labels':['A','B','C','D']})

而不是多个 np.where 条件,我想使用Oror|运算符来检查条件中的多个值,np.where如下所示

df['labels'] = np.where(df['tokens'] == ('test'|'correct'|is.na()),'new_label',df['labels'])

但是,这会导致错误

类型错误:不支持 | 的操作数类型:'str' 和 'str'

我希望我的输出如下所示。对于具有数百万条记录的大数据,我如何有效地做到这一点?

回答

第一个想法是用列表中的某个值替换缺失值,例如test,然后比较Series.isin

df['labels'] = np.where(df['tokens'].fillna('test').isin(['test','correct']),
'new_label',
df['labels'])
print (df)
text tokens labels
0 Hi how test new_label
1 I am fine correct new_label
2 Ila say Hi Tim C
3 hello NaN new_label

或者通过|按位OR形式 compare链接另一个掩码NaN

df['labels'] = np.where(df['tokens'].isin(['test','correct']) | df['tokens'].isna(),
'new_label',
df['labels'])
print (df)
text tokens labels
0 Hi how test new_label
1 I am fine correct new_label
2 Ila say Hi Tim C
3 hello NaN new_label






推荐阅读
author-avatar
月獠_189
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有