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

如何预处理CSV转DataFrame中的多值属性并生成独热编码?

问题描述
  • 输入为CSV文件
  • CSV文件包含多种数据类型的列:有序值、标称值、数值型值和多值
  • 多值列中最少包含1个值,最多包含5个值,输入示例如下:
Job PerksInsurance Benefits
Online Courses; Certification Programs; Cross TrainingLife Insurance; Dental Insurance
Leadership Development Programs; Online CoursesLife Insurance; Accident Insurance
  • 多值列预期输出:
Job Perks_Online CoursesJob Perks_Certification ProgramsJob Perks_Cross TrainingJob Perks_Leadership Development ProgramsInsurance Benefits_Life InsuranceInsurance Benefits_Dental InsuranceInsurance Benefits_Accident Insurance
1110110
1001101
  • 如何对CSV输入进行预处理并保存为符合上述预期输出的DataFrame?我已能将标称属性预处理为预期输出(示例代码如下),但难以转换多值属性
输入

CSV数据集:本地文件ECP_Unedited.csv

示例代码
# 处理标称属性
import pandas as pd
import numpy as np
import dtale # 更友好的DataFrame输出工具

nominalColumns = ["Gender", "Marital Status", "Educational Attainment", "Employment Status", "Company Bonus Structure", "Company Medical Plan Type"]
multivalueColumns = ["Job Perks", "Professional Development Opportunities", "Insurance Benefits"]

df = pd.read_csv('ECP_Unedited.csv')

# 转换标称列
newCols = pd.get_dummies(df[nominalColumns], dtype=int)
df = df.drop(columns=nominalColumns)
df = pd.concat([df, newCols], axis=1)
dtale.show(df)

# 转换多值列
# 在此插入代码!
解决方案

针对多值列的转换,我们可以通过拆分多值、生成独热编码的方式实现,完整代码如下:

# 处理标称属性
import pandas as pd
import numpy as np
import dtale # 更友好的DataFrame输出工具

nominalColumns = ["Gender", "Marital Status", "Educational Attainment", "Employment Status", "Company Bonus Structure", "Company Medical Plan Type"]
multivalueColumns = ["Job Perks", "Professional Development Opportunities", "Insurance Benefits"]

df = pd.read_csv('ECP_Unedited.csv')

# 转换标称列
newCols = pd.get_dummies(df[nominalColumns], dtype=int)
df = df.drop(columns=nominalColumns)
df = pd.concat([df, newCols], axis=1)

# 转换多值列
for col in multivalueColumns:
    # 拆分多值,自动去除每个值前后的空格
    split_col = df[col].str.split(';\s*', expand=False)
    # 生成独热编码并添加原列名前缀
    dummy_col = split_col.str.join('|').str.get_dummies(sep='|').add_prefix(f"{col}_")
    # 合并新列到原DataFrame
    df = pd.concat([df, dummy_col], axis=1)
    # 删除原多值列
    df = df.drop(columns=col)

dtale.show(df)

代码说明

  • str.split(';\s*', expand=False):用分号加任意空格作为分隔符,确保A; B这类格式能正确拆分成A和B
  • split_col.str.join('|').str.get_dummies(sep='|'):先把拆分后的列表转为|连接的字符串,再生成独热编码,存在对应取值则为1,否则为0
  • add_prefix(f"{col}_"):给新生成的列名添加原列名前缀,和预期输出的命名格式完全匹配

内容的提问来源于stack exchange,提问作者DILF Unboxing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:44:55