Python中如何将城市字符串列表转换为数字编码用于数据挖掘?
类别特征的标签编码实现(Python)
核心技术关键词
- 标签编码(Label Encoding):将离散类别型字符串映射为连续整数的编码方式,是数据挖掘中预处理类别特征的常用手段,适用于无顺序的类别特征(如城市名称)。
- 类别特征预处理:你的需求属于数据挖掘流程中,对非数值型类别特征的转换环节,目的是将字符串特征转换为模型可识别的数值格式。
实现方式
1. 手动实现(无需第三方库)
适合快速验证需求,可灵活控制编码顺序:
cities = ['new york', 'los angeles', 'miami', 'new york', 'dallas'] # 按原列表中城市首次出现的顺序建立映射(从1开始编码) city_mapping = {city: idx + 1 for idx, city in enumerate(dict.fromkeys(cities))} encoded_list = [city_mapping[city] for city in cities] print(encoded_list) # 输出: [1, 2, 3, 1, 4]
- 若需要按字母排序生成编码,将
dict.fromkeys(cities)替换为sorted(set(cities))即可。
2. 使用scikit-learn的LabelEncoder
适合集成到机器学习预处理流水线,支持大规模数据处理:
from sklearn.preprocessing import LabelEncoder from collections import OrderedDict cities = ['new york', 'los angeles', 'miami', 'new york', 'dallas'] # 按原列表出现顺序定义唯一类别 unique_cities = list(OrderedDict.fromkeys(cities)) le = LabelEncoder() le.fit(unique_cities) # 生成编码并转为从1开始 encoded_list = le.transform(cities) + 1 print(encoded_list) # 输出: [1, 2, 3, 1, 4]
- 若不指定顺序,
LabelEncoder默认按字母排序对类别编码。
3. 使用pandas的factorize方法
pandas内置工具,简洁高效,默认按类别首次出现顺序编码:
import pandas as pd cities = ['new york', 'los angeles', 'miami', 'new york', 'dallas'] # factorize返回编码(从0开始)和唯一类别数组 encoded_arr, unique_cities = pd.factorize(cities) # 转为从1开始的编码 encoded_list = encoded_arr + 1 print(encoded_list) # 输出: [1, 2, 3, 1, 4]
内容的提问来源于stack exchange,提问作者MEGAH ADI WICAKSONO
相关产品推荐
相关产品推荐

