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

如何用Pandas实现字符级拆分的空格分隔独热编码

实现字符级别的空格兼容独热编码(合并字符组合为单个字符特征)

我来帮你搞定这个需求!你现在的问题是,str.get_dummies(' ')会把空格分隔的子串(比如"ap")当成独立的特征,但你希望不管字符是分开还是连在一起的,都按单个字符来生成独热编码。下面给你两种可行的解决方案:

方法一:字符串预处理 + get_dummies

核心思路是先把所有字符串中的空格去掉,再将每个字符拆出来用空格连接,最后用get_dummies生成编码:

import pandas as pd
import numpy as np

# 初始化你的数据
df = pd.DataFrame(["c", "b", "a p", np.nan, "ap"])

# 处理流程:填充空值 → 移除空格 → 拆分单个字符 → 用空格连接 → 生成独热编码
result = df[0].fillna('')\
              .str.replace(' ', '')\
              .str.findall('.')\
              .str.join(' ')\
              .str.get_dummies(' ')

print(result)

输出结果完全符合你的期望:

a  b  c  p
0  0  0  1  0
1  0  1  0  0
2  1  0  0  1
3  0  0  0  0
4  1  0  0  1

步骤解释:

  • fillna(''):把NaN值替换为空字符串,避免后续字符串操作报错
  • str.replace(' ', ''):移除所有空格,只保留纯字符内容
  • str.findall('.'):匹配每个单个字符,返回字符列表(比如"ap"会变成['a','p'])
  • str.join(' '):把字符列表用空格重新连接成字符串,让get_dummies能识别每个字符为独立类别
  • str.get_dummies(' '):按空格分割生成独热编码,此时每个字符都是单独的特征

方法二:用explode + crosstab实现

另一种更直观的思路是把每个字符拆分成单独的行,再用交叉表统计生成编码:

import pandas as pd
import numpy as np

df = pd.DataFrame(["c", "b", "a p", np.nan, "ap"])

# 处理空值 → 移除空格 → 拆分字符列表 → 展开为单行单个字符
exploded_chars = df[0].fillna('')\
                      .str.replace(' ', '')\
                      .str.findall('.')\
                      .explode()

# 用交叉表统计每个原行对应的字符出现情况,对齐原索引
result = pd.crosstab(exploded_chars.index, exploded_chars).reindex(df.index, fill_value=0)

print(result)

这个方法同样能得到你想要的结果,适合需要更灵活处理字符的场景。

步骤解释:

  • explode():把每个字符列表拆分成单独的行,每个字符对应原数据的行索引
  • pd.crosstab():统计每个索引(原行号)下各字符的出现次数,自动生成独热编码格式
  • reindex(df.index, fill_value=0):对齐原数据的索引,没有字符的行填充0,保证结果行数和原数据一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:19:08