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

如何用Pandas将含逗号分隔字符串的列转换为独热编码式新列?

高效实现含逗号分隔字符串列的独热编码

针对你遇到的问题,不用手动创建数百个列,用pandas的向量化操作就能高效搞定,不管是单列还是多列都适用,步骤如下:

1. 处理单列场景(以你的ColumnB为例)

步骤1:清洗字符串格式

首先把ColumnB里的{"value1", "value2"}格式字符串转换成列表:

import pandas as pd

# 构造示例数据
data = {
    'ColumnA': [1, 2, 3, 4],
    'ColumnB': ['{"alpha", "bravo"}', '{"bravo", "charlie"}', '{"alpha", "charlie","gama"}', '{"bravo", "charlie","delta"}']
}
df = pd.DataFrame(data)

# 清洗字符串:去掉大括号、引号,按逗号+任意空格分割成列表
df['ColumnB'] = df['ColumnB'].str.strip('{}').str.replace('"', '').str.split(',\s*')

步骤2:生成独热编码

利用explode拆分列表为多行,再用get_dummies生成编码后按行聚合求和:

# 生成独热编码并聚合
one_hot_df = df['ColumnB'].explode().str.get_dummies().groupby(level=0).sum()

# 合并原数据的ColumnA和独热编码结果
final_df = pd.concat([df['ColumnA'], one_hot_df], axis=1)

# 可选:调整列顺序匹配你的示例输出
final_df = final_df[['ColumnA', 'alpha', 'bravo', 'charlie', 'delta', 'gama']]

运行后final_df就是你要的输出格式,自动生成所有唯一值对应的列,不用手动定义。

2. 扩展到多列场景

如果有多个类似格式的列(比如ColumnC),可以封装成函数批量处理:

def process_one_hot_col(df, col_name):
    # 清洗目标列
    cleaned_col = df[col_name].str.strip('{}').str.replace('"', '').str.split(',\s*')
    # 生成独热编码并聚合
    one_hot = cleaned_col.explode().str.get_dummies().groupby(level=0).sum()
    # 合并结果并删除原列
    return pd.concat([df.drop(col_name, axis=1), one_hot], axis=1)

# 批量处理ColumnB和ColumnC
processed_df = process_one_hot_col(df, 'ColumnB')
processed_df = process_one_hot_col(processed_df, 'ColumnC')

优势说明

  • 完全自动化生成所有唯一值的独热列,不用手动写数百个lambda判断
  • 用pandas原生向量化操作,比循环/apply效率高得多,适合数千行的大数据量
  • 兼容带空格、下划线的value格式(比如"X Y Z"、"X_Y_Z"),会完整保留为列名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:35:22