如何使用Python(含Pandas)将CSV类别标签转换为独热编码格式
嘿,这个需求用Pandas就能轻松实现,我给你两种实用的方案,都是几行代码就能搞定的事儿:
方法一:用pd.get_dummies()(最直接推荐)
这是Pandas专门用来生成独热编码的工具,完美匹配你的需求:
import pandas as pd # 1. 读取原始CSV文件 df = pd.read_csv('your_label_file.csv') # 2. 对type列生成独热编码,prefix参数指定列名前缀为type one_hot = pd.get_dummies(df['type'], prefix='type') # 3. 把id列和独热编码列合并起来 result_df = pd.concat([df['id'], one_hot], axis=1) # 可选:如果需要确保列的顺序严格是type1→type4(比如原数据type出现顺序不规则时) result_df = result_df[['id', 'type1', 'type2', 'type3', 'type4']] # 4. 保存成新的CSV(如果需要的话) result_df.to_csv('one_hot_labels.csv', index=False)
方法二:用pd.crosstab()
如果你习惯用交叉表的方式生成,也可以这么做,效果完全一致:
import pandas as pd df = pd.read_csv('your_label_file.csv') # 用id和type做交叉表,自动生成每个id对应的类别标记 result_df = pd.crosstab(df['id'], df['type']).reset_index() # 重命名列名,改成你要的type1/type2格式 result_df.columns = ['id'] + [f'type{i}' for i in result_df.columns[1:]] # 保存结果 result_df.to_csv('one_hot_labels.csv', index=False)
小提示
- 两种方法都会自动把原始的type值(1/2/3/4)转换成对应的列:比如type=1时,type1列是1,其他列是0,完全符合你要的格式。
- 如果你的原始数据里type可能有超出1-4的类别,记得先做过滤(比如
df = df[df['type'].isin([1,2,3,4])]),避免生成多余的列。
内容的提问来源于stack exchange,提问作者Agnesia
相关产品推荐
相关产品推荐

