如何用Python将数据列中含指定关键词的值替换为对应分类?
解决方案
你之前的replace代码是精确匹配逻辑,只有当单元格值完全等于列表里的内容时才会替换,而你需要的是包含指定关键词的模糊替换,所以没生效。下面是两种可行的实现方式:
方法1:用np.where结合str.contains(逻辑直观)
逐个处理不同关键词的替换需求,适合规则较多时分步调试:
import numpy as np import pandas as pd # 替换包含'car'的所有值为'car' credit_scoring['purpose'] = np.where( credit_scoring['purpose'].str.contains('car', case=False, na=False), 'car', credit_scoring['purpose'] ) # 替换包含'wedding'的所有值为'wedding' credit_scoring['purpose'] = np.where( credit_scoring['purpose'].str.contains('wedding', case=False, na=False), 'wedding', credit_scoring['purpose'] ) # 其他替换示例:把包含'real estate'或'building a property'的值统一换成'real estate' credit_scoring['purpose'] = np.where( credit_scoring['purpose'].str.contains('real estate|building a property', case=False, na=False), 'real estate', credit_scoring['purpose'] )
参数说明:
case=False:不区分关键词的大小写(比如'Car'也会被匹配),不需要的话可以改成Truena=False:遇到空值时不替换,保留原样
方法2:用replace配合正则表达式(更简洁)
把所有替换规则写成字典,一次性完成所有模糊替换:
# 定义替换规则:键是匹配关键词的正则表达式,值是替换后的目标内容 replace_rules = { r'.*car.*': 'car', r'.*wedding.*': 'wedding', r'.*(real estate|building a property).*': 'real estate' } # 开启regex参数,启用正则模糊匹配 credit_scoring['purpose'] = credit_scoring['purpose'].replace(replace_rules, regex=True)
说明:.*表示任意长度的任意字符,所以.*car.*能匹配所有包含'car'的字符串,你可以根据实际的取值情况,继续在字典里添加更多规则。
内容的提问来源于stack exchange,提问作者alars
相关产品推荐
相关产品推荐

