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

如何用Python为Pandas DataFrame生成通用状态独热编码列?

Pandas实现分类列转多列二进制标记的通用方案

嘿,这需求其实就是咱们常说的**独热编码(One-Hot Encoding)**场景,Pandas里有现成的高效方法,也可以手动实现来适配更定制化的情况,下面给你两种通用的Python实现方案:

方法一:用Pandas内置的get_dummies(最简洁推荐)

这是最省心的方式,Pandas会自动识别分类列的所有唯一值,一键生成你要的二进制标记列:

import pandas as pd

# 示例DataFrame,替换成你的实际数据
df = pd.DataFrame({'status': ['married', 'single', 'divorced', 'married', 'single']})

# 生成独热编码列,prefix参数设置列名前缀
one_hot_columns = pd.get_dummies(df['status'], prefix='status')

# 将新列合并回原DataFrame
df = pd.concat([df, one_hot_columns], axis=1)

默认生成的列名是status_married这种下划线连接的格式,如果想要空格分隔的status married,只需要加一步列名重命名:

one_hot_columns.columns = [col.replace('_', ' ') for col in one_hot_columns.columns]

方法二:手动实现(更灵活可控)

如果需要提前固定要生成的类别(比如确保即使数据里暂时没有divorced也会生成对应列),可以用循环手动创建列:

import pandas as pd

df = pd.DataFrame({'status': ['married', 'single', 'married', 'single']})

# 提前定义所有可能的状态类别,保证通用性
all_status = ['married', 'single', 'divorced']

for status in all_status:
    # 对每一行判断是否匹配当前类别,转成整数1/0
    df[f'status {status}'] = (df['status'] == status).astype(int)

这个方法的好处是不管原数据里有没有某个类别,都会生成对应的列,避免后续因为数据变化导致列缺失的问题。

小提示

  • 如果原status列存在缺失值,get_dummies会自动忽略这些行(对应列都为0),手动实现的方式也会给缺失值行赋值0,如果你需要特殊处理缺失值,可以先通过df['status'].fillna()填充后再操作。
  • 这两种方案都可以直接复用在其他分类列上,只需要替换列名和类别列表就行,通用性拉满~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:10:57