You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在pandas列中检索特定短语并赋值新列时出现报错如何解决

错误原因

你的代码问题出在赋值逻辑不匹配:

  • df.loc[df['Description'].str.contains("work from home",na=False)] 返回的是满足筛选条件的整行数据子集,属于二维的DataFrame对象,并非你需要的单列结果
  • 直接将多列的DataFrame赋值给新的单列df['Work From Home'],数据维度不匹配就会触发ValueError。此前检索「social insurance」未报错只是巧合:刚好仅有1行符合条件,pandas自动做了临时兼容,逻辑本身也是错误的。

正确实现方案

根据常用需求分为两种场景:

场景1:新列存储布尔匹配标识(匹配为True/不匹配为False)

直接将str.contains返回的一维布尔Series赋值给新列即可,这是最常用的实现方式:

df['Work From Home'] = df['Description'].str.contains("work from home", na=False)

如果需要替换为更直观的文本标识,可以追加映射逻辑:

df['Work From Home'] = df['Description'].str.contains("work from home", na=False).map({True: '是', False: '否'})

场景2:新列仅保留匹配行的Description内容,不匹配行留空

如果需要提取匹配到的原描述文本,可使用where方法实现:

df['Work From Home'] = df['Description'].where(df['Description'].str.contains("work from home", na=False), '')

单独提取匹配行子集的正确写法

如果确实需要单独存储所有匹配的整行数据做后续处理,单独赋值给新变量即可,不要直接赋值给原DataFrame的单列:

workfromhome_df = df.loc[df['Description'].str.contains("work from home", na=False)].copy()

内容的提问来源于stack exchange,提问作者Seif Mahdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:57:02