如何用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
相关产品推荐
相关产品推荐

