如何将分类列的bigram转换为独立列实现字符串编码?
实现字符串Bigram拆分与One-Hot编码
原数据集
| A |
|---|
| blue |
| red |
| black |
期望结果
| A | bl | lu | ue | re | ed | la | ac | ck |
|---|---|---|---|---|---|---|---|---|
| blue | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
| red | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
| black | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
代码实现(基于Pandas)
用Python的Pandas库就能直接完成需求,步骤如下:
- 导入库并初始化数据集
import pandas as pd df = pd.DataFrame({'A': ['blue', 'red', 'black']})
- 定义Bigram生成函数
这个函数负责把单个字符串拆分成连续的双字符组合:
def get_bigrams(s): # 遍历字符串,每次取连续两个字符,直到倒数第二个字符 return [s[i:i+2] for i in range(len(s)-1)]
- 收集所有唯一的Bigram
遍历所有字符串,收集所有可能的Bigram并去重:
all_bigrams = [] for string in df['A']: all_bigrams.extend(get_bigrams(string)) # 去重并排序,保证列顺序稳定 unique_bigrams = sorted(list(set(all_bigrams)))
- 生成One-Hot编码列
对每个唯一的Bigram,检查每行字符串是否包含它,生成对应的1/0标记列:
for bg in unique_bigrams: df[bg] = df['A'].apply(lambda x: 1 if bg in get_bigrams(x) else 0)
运行完以上代码后,df就是你需要的结果。
内容的提问来源于stack exchange,提问作者revarein
相关产品推荐
相关产品推荐

