在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
相关产品推荐
相关产品推荐

