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

如何使用Pandas将特征列表列拆分为多列并赋值?

使用Pandas拆分CSV中的特征列表列

问题场景

我有一个包含9列的CSV文件,最后一列Labels Name List是特征列表,数据示例如下:

First Name  Last Name                         Email Grad Date                Major List  Appointments Count  Advising Time  Labels Count                                   Labels Name List
0     Adrien      Yanez           ayaneza@twitter.com       NaN  Psychology: Neuroscience                  12            325            18  acad_stat=gr, class_code=sr, sess=fa, re_id=11...
1    Aindrea     Braams             abraams3v@nps.gov       NaN  Psychology: Neuroscience                   4            120            17  cx_id=600852, re_id=1114446, primary_departmen...
2      Alida  Swinburne  aswinburne52@cyberchimps.com  5/1/2022                Psychology                   1             30            14  re_id=1124407, primary_department=psychology, ...

需求目标:将Labels Name List列中的每个标签/特征作为新列名,列值为标签后=符号后的内容;若标签无=符号,则列值设为1;若某行不存在对应标签,列值设为None或0。

示例输入特征列表:

adv1=syed ahmad, cx_id=616758, re_id=1112539, slate_id=, class_session=spring, class_yr=2018, advd=joseph atkins, adv2=, not labeled seniors 2022

示例拆分后输出:

adv1   cx_id    re_id  slate_id class_session  class_yr           advd  adv2  not labeled seniors 2022
0  syed admad  616758  1112539         1        spring      2018  joseph atkins     1                         1

解决方案

1. 读取CSV数据

先加载目标CSV文件:

import pandas as pd

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

2. 定义标签解析函数

编写函数处理每行的特征字符串,将其转为键值对字典:

def parse_labels(label_str):
    if pd.isna(label_str):
        return {}
    # 分割标签并去除首尾空格
    labels = [item.strip() for item in label_str.split(',')]
    label_dict = {}
    for label in labels:
        if '=' in label:
            # 仅分割第一个等号,避免值中包含等号导致错误
            key, value = label.split('=', 1)
            # 空值标签设为1,否则保留原值
            label_dict[key] = value if value else 1
        else:
            # 无等号的标签值设为1
            label_dict[label] = 1
    return label_dict

3. 生成标签列并合并数据

将解析后的字典转为DataFrame,再与原数据合并:

# 对每行的Labels Name List应用解析函数
label_dicts = df['Labels Name List'].apply(parse_labels)
# 转换为DataFrame,缺失值填充为None(或替换为0)
label_df = pd.DataFrame(label_dicts.tolist()).fillna(None)

# 合并原数据与新标签列,移除原Labels Name List列
result_df = pd.concat([df.drop('Labels Name List', axis=1), label_df], axis=1)

4. 输出结果

查看或保存处理后的数据:

# 打印前几行验证
print(result_df.head())
# 保存到新CSV文件
result_df.to_csv('split_labels_result.csv', index=False)

关键说明

  • 使用split('=', 1)确保只分割第一个等号,兼容标签值包含等号的场景;
  • 空值标签(如slate_id=)自动设为1;
  • 缺失的标签列默认填充None,若需要数值0,可将fillna(None)改为fillna(0);
  • 合并后保留原数据所有列,仅移除原特征列表列。

内容的提问来源于stack exchange,提问作者Nader Shehata

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:45:37