如何用Pandas将含逗号分隔字符串的列转换为二进制特征列
解决方法
1. 先读入Excel文件
import pandas as pd # 读取目标Excel文件 df = pd.read_excel("Data.xlsx") # 单独提取Operations列 ops_series = df["Operations"]
2. 正确拆分字符串
你的核心问题是要保留带空格的完整操作项——别用普通空格拆分,直接按", "(逗号加空格)作为分隔符切分即可:
# 按", "拆分每行内容,得到每行的操作列表 split_ops = ops_series.str.split(", ")
如果遇到少数只有逗号、没有空格的特殊分隔情况,改用正则匹配任意逗号加空白字符:split_ops = ops_series.str.split(r",\s*")
3. 提取所有唯一操作项
把拆分后的所有操作列表展平,去重得到需要编码的所有唯一值:
# 展平所有操作列表,提取唯一操作项 unique_operations = pd.unique(split_ops.explode())
4. 生成二进制编码列
遍历每个唯一操作项,给每行标记1(该操作存在)或0(该操作不存在):
# 为每个操作项生成对应的二进制列 for op in unique_operations: df[op] = split_ops.apply(lambda x: 1 if op in x else 0)
完整代码示例
import pandas as pd # 读取Excel文件 df = pd.read_excel("Data.xlsx") # 拆分Operations列 split_ops = df["Operations"].str.split(", ") # 获取所有唯一操作项 unique_ops = pd.unique(split_ops.explode()) # 生成二进制编码列 for op in unique_ops: df[op] = split_ops.apply(lambda x: 1 if op in x else 0) # 查看处理后的结果 print(df.head())
补充说明
- 如果同一行存在重复的操作项(比如
"stringA, stringA"),代码会自动标记为1,不会重复计数 - 要是你的分隔规则还有其他特殊场景,可以调整
split的参数,比如用正则匹配更复杂的分隔模式
内容的提问来源于stack exchange,提问作者plambertini
相关产品推荐
相关产品推荐

