基于pandas将类别属性转化为数值属性的方法
在数据预处理中,将类别属性转化为数值属性是常见需求。本文介绍两种基于pandas的处理方法:针对无大小意义的离散特征使用get_dummies进行One-Hot编码;针对有大小意义的特征,通过字典映射将其转换为有序的数值。
离散特征编码的两种策略
处理离散型特征时,通常根据特征本身的语义属性选择不同的编码方式:
- 无大小意义的离散特征:例如颜色(红、绿、蓝),类别之间没有顺序关系。这类特征适合使用
One-Hot编码,将其转化为多个布尔列。 - 有大小意义的离散特征:例如尺码(S、M、L、XL),类别之间存在明确的顺序关系。这类特征适合直接进行数值映射,保留其大小逻辑。
有大小意义的特征:数值映射
对于具有明确顺序的类别特征,可以直接构建映射字典,利用 pandas.Series.map() 方法进行转换。
操作步骤
- 定义映射字典:根据业务逻辑,将类别字符串映射为对应的整数值。
- 执行映射:使用
df['column_name'].map(mapping_dict)完成转换。
import pandas as pd
# 创建示例数据
df = pd.DataFrame([
['green', 'M', 10.1, 'class1'],
['red', 'L', 13.5, 'class2'],
['blue', 'XL', 15.3, 'class1']])
# 设置列名
df.columns = ['color', 'size', 'prize', 'class label']
# 1. 处理有大小意义的 'size' 特征
size_mapping = {
'XL': 3,
'L': 2,
'M': 1
}
df['size'] = df['size'].map(size_mapping)
# 2. 处理类别标签 'class label'
# 使用 enumerate 自动分配索引
class_mapping = {label:idx for idx,label in enumerate(set(df['class label']))}
df['class label'] = df['class label'].map(class_mapping)
无大小意义的特征:One-Hot 编码
对于没有顺序关系的类别特征(如颜色),One-Hot 编码能避免引入错误的数值大小关系。在 pandas 中,可以使用 pd.get_dummies() 函数快速实现。
操作步骤
- 调用函数:直接对 DataFrame 或特定列调用
pd.get_dummies()。 - 结果处理:函数会为每一类生成一个新的布尔列(0 或 1)。
# 使用 get_dummies 进行 one-hot 编码
# 该函数会为某一列中的每个唯一字符串创建新列
pd.get_dummies(df)
总结
根据特征是否具有顺序关系,选择合适的编码方式至关重要。数值映射保留了有序信息,而 One-Hot 编码则避免了无序特征间的虚假大小关联。掌握这两种方法,能有效提升数据预处理的质量。
以上就是基于pandas将类别属性转化为数值属性的方法的详细内容,更多关于pandas数据预处理、特征编码的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









