如何在pandas DataFrame列中检索多个字符串并更新对应单元格值
错误原因
你修改后的代码不符合np.where的语法要求:
单个np.where的参数结构为np.where(判断条件, 条件为真时的返回值, 条件为假时的返回值),多条件匹配需要把下一级判断放在「条件为假时的返回值」的位置做嵌套,你直接并列传入了两组独立的三元参数,参数匹配错误才触发ValueError。
解决方案
方案1:嵌套np.where(适合条件较少的场景)
如果只有2-3个匹配规则,直接嵌套写即可,注意最新版pandas已不推荐用pd.np写法,直接调用导入的np即可:
df['cat'] = np.where(df['Vendor'].str.contains('holding'), "Yes", np.where(df['Vendor'].str.contains('tech'), "tech", ""))
方案2:np.select(适合多条件场景,可读性、可维护性更高)
如果后续还要新增匹配规则,推荐用np.select,把条件和对应返回值分开定义,修改更方便:
# 按优先级排序匹配条件,前面的条件优先级更高 conditions = [ df['Vendor'].str.contains('holding'), df['Vendor'].str.contains('tech') # 新增条件直接在此处追加即可 ] # 每个条件对应要返回的取值,和上面的条件顺序一一对应 choices = [ "Yes", "tech" # 新增返回值在此处对应追加即可 ] # 所有条件都不满足时返回空字符串 df['cat'] = np.select(conditions, choices, default="")
补充提示
如果匹配不需要区分大小写,可以给str.contains加case=False参数,例如df['Vendor'].str.contains('holding', case=False),会同时匹配Holding、HOLDING等大小写混合的内容。
内容的提问来源于stack exchange,提问作者Rajesh Bahl
相关产品推荐
相关产品推荐

