Python中借助pandas将整数转为哑变量向量,是否有现成函数?
现成工具完全能满足你的需求,不用重复造轮子!
嘿,刚好你要的这种整数转对应位置哑变量的需求,不管用pandas还是scikit-learn都有现成的函数可以直接用,下面给你两种常用的实现方式:
方法一:用pandas的get_dummies(适合快速处理pandas数据)
get_dummies本身就是用来生成哑变量的,只要稍微处理一下就能得到你要的向量格式:
import pandas as pd # 假设你的特征是一个pandas Series(或者DataFrame的某一列) category_series = pd.Series([1, 2, 3, 4, 5, 1, 3]) # 生成哑变量DataFrame,每个类别对应一列 dummies_df = pd.get_dummies(category_series, prefix="class") # 把每行转成你要的向量格式(列表或numpy数组都可以) one_hot_vectors = dummies_df.values.tolist() print(one_hot_vectors) # 输出:[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1], [1, 0, 0, 0, 0], [0, 0, 1, 0, 0]]
如果你的数据里可能缺失某些类别(比如特征本该有5个类别,但当前数据里只出现了3个),可以手动指定categories参数来确保所有类别都被包含:
dummies_df = pd.get_dummies(category_series, prefix="class", categories=[1, 2, 3, 4, 5])
方法二:用scikit-learn的OneHotEncoder(适合机器学习流程)
如果你后续要把这个编码和机器学习模型结合,OneHotEncoder会更灵活,它支持拟合后复用编码规则:
from sklearn.preprocessing import OneHotEncoder import numpy as np # 把数据转成二维数组(sklearn的编码器要求输入是二维的) category_data = np.array([1, 2, 3, 4, 5, 1, 3]).reshape(-1, 1) # 初始化编码器,指定所有类别,关闭稀疏输出 encoder = OneHotEncoder(categories=[[1, 2, 3, 4, 5]], sparse_output=False) # 拟合并转换数据 one_hot_vectors = encoder.fit_transform(category_data) print(one_hot_vectors.tolist()) # 输出和上面完全一致的向量列表
这两种方法都能完美实现你要的效果,完全不用自己手动写循环生成向量~
内容的提问来源于stack exchange,提问作者adrien22
相关产品推荐
相关产品推荐

