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

Python Pandas如何高效将object文本字段标准化为指定分类用于聚类

实现方案

字段覆盖说明

可以直接覆盖原有beverages字段,如果需要保留原始取值留作后续溯源,可以先备份原始值再覆盖:

df['beverages_raw'] = df['beverages'].copy()

高效分箱实现

推荐两种适配需求的实现方式,均支持模糊匹配规则,完全符合你给出的示例转换逻辑:

方案1:np.select向量化匹配(性能最优,扩展性强)

利用numpy的向量化条件判断,比循环/apply执行效率更高,新增分类时只需要扩展条件列表即可:

import numpy as np
import pandas as pd

# 按优先级定义匹配条件,case=False忽略大小写,na=False将空值视为不匹配
conditions = [
    df['beverages'].str.contains('milk', case=False, na=False),
    df['beverages'].str.contains('water', case=False, na=False),
    df['beverages'].str.contains('soda', case=False, na=False)
]
# 条件对应的分类取值
choices = ['milk', 'water', 'soda']

# 未匹配到的取值默认归为other,直接覆盖原有字段
df['beverages'] = np.select(conditions, choices, default='other')

方案2:lambda+if-else嵌套(写法简洁,适合少量分类)

如果分类逻辑固定且数量少,可以直接用apply加嵌套判断实现:

df['beverages'] = df['beverages'].astype(str).apply(
    lambda x: 'milk' if 'milk' in x.lower()
    else 'water' if 'water' in x.lower()
    else 'soda' if 'soda' in x.lower()
    else 'other'
)

通配符扩展说明

如果需要更复杂的通配匹配规则,str.contains原生支持正则表达式,替代通用通配符即可:

  • 匹配任意位置含milk的取值:对应通配*milk*,正则写milk即可
  • 匹配以milk开头的取值:对应通配milk*,正则写^milk
  • 匹配以milk结尾的取值:对应通配*milk,正则写milk$

后续One-Hot编码处理

分箱完成后beverages字段仅保留4个分类取值,直接用get_dummies生成编码字段即可供聚类使用:

df = pd.get_dummies(df, columns=['beverages'], dtype=int)

运行后会自动生成beverages_milk、beverages_water、beverages_soda、beverages_other四个0/1特征列。

内容的提问来源于stack exchange,提问作者Peter Abraldes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:27:00