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

在Pandas中处理DataFrame混合类型列生成指定格式新变量

解决方案

1. 生成测试数据

先构造符合需求的测试DataFrame,模拟包含数组格式字符串和[nan]的object类型列:

import pandas as pd
import numpy as np

# 模拟给定的唯一值数组
unique_subject_vals = [
    "[101-数学, 102-语文]",
    "[201-物理, 202-化学, 203-生物]",
    "[nan]",
    "[301-历史, 302-地理]"
]

# 生成测试用DataFrame
df = pd.DataFrame({
    'raw_subjects': np.random.choice(unique_subject_vals, size=10)
})

2. 编写处理逻辑并生成新变量

通过正则表达式提取学科名称,同时处理[nan]的特殊情况:

import re

def parse_subjects(raw_str):
    # 处理空值情况
    if raw_str.strip() == "[nan]":
        return [], ""
    # 去除首尾方括号并分割学科项
    subject_items = raw_str.strip('[]').split(', ')
    # 移除数字前缀,保留学科名称
    clean_subjects = [re.sub(r'^\d+-', '', item) for item in subject_items]
    # 返回列表格式和逗号分隔字符串格式
    return clean_subjects, ', '.join(clean_subjects)

# 应用函数到目标列,生成两个新变量
df[['new_var1', 'new_var2']] = df['raw_subjects'].apply(lambda x: pd.Series(parse_subjects(x)))

3. 示例输出结果

处理后的DataFrame示例如下:

raw_subjects          new_var1       new_var2
0        [101-数学, 102-语文]        [数学, 语文]       数学, 语文
1  [201-物理, 202-化学, 203-生物]  [物理, 化学, 生物]  物理, 化学, 生物
2                      [nan]                []               
3        [301-历史, 302-地理]        [历史, 地理]       历史, 地理

关键说明

  • 使用正则表达式^\d+-匹配学科项开头的数字前缀(如101-),通过替换为空字符串提取纯学科名称
  • 单独判断[nan]字符串,返回空列表和空字符串,避免无效解析
  • 利用apply结合pd.Series,将函数返回的两个结果一次性赋值给新列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:30:52