Python实现SQL Case when等价逻辑报错,求Windows版本分类方案
问题解决:实现类似SQL Case When的Windows版本分类
错误原因
你编写的函数直接操作整个df['twitter']列,返回的是布尔值Series,但if判断需要单个布尔值,因此触发ValueError。apply是逐行处理逻辑,应该针对单个文本字符串做判断,而非整个列。
正确实现方式
方式1:修改apply函数(逐行处理)
调整函数参数为单个文本,对每行的字符串单独判断:
def windows_ver(text): lower_text = text.lower() if 'windows 11' in lower_text: return 'windows 11' elif 'windows 10' in lower_text: return 'windows 10' return 'windows 8 or older' # 应用到twitter列 df['windows_version'] = df['twitter'].apply(windows_ver)
方式2:使用np.select(向量化操作,更接近SQL Case When)
适合大数据量场景,效率更高:
import numpy as np # 定义判断条件(按优先级排序) conditions = [ df['twitter'].str.lower().str.contains('windows 11', na=False), df['twitter'].str.lower().str.contains('windows 10', na=False) ] # 对应条件的返回值 choices = [ 'windows 11', 'windows 10' ] # 生成分类列,默认值为其他版本 df['windows_version'] = np.select(conditions, choices, default='windows 8 or older')
注意事项
- 如果文本同时包含多个Windows版本关键词,会按条件列表的优先级顺序匹配第一个符合的规则(和原逻辑一致)。
- 加入
na=False参数可以处理twitter列的缺失值,避免因空值导致的报错。
内容的提问来源于stack exchange,提问作者rookie_developer
相关产品推荐
相关产品推荐

