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

如何用Python从code列拆分字符串并生成对应数值列?

解决方案

可以通过正则表达式解析字符串,结合Pandas来实现从code列提取标识并生成对应数值列的需求,以下是具体实现:

实现步骤

  • 用正则匹配数字+大写字母标识的组合,提取数值和对应列名
  • 逐行解析code列内容,生成列名到数值的映射字典
  • 将映射字典转为DataFrame,与原数据合并后填充缺失值为0

完整代码示例

import pandas as pd
import re

# 构造示例数据
data = {
    'id': [1, 2, 3],
    'code': ['74C + 24HD', '23C + 14HT + 3S', '0']
}
df = pd.DataFrame(data)

# 定义正则匹配模式:捕获数字和后续的大写字母标识
pattern = re.compile(r'(\d+)([A-Z]+)')

# 解析单个code字符串的函数
def parse_code(code_str):
    if code_str == '0':
        return {}
    # 提取所有匹配的数值和标识对
    matches = pattern.findall(code_str)
    return {col: int(num) for num, col in matches}

# 解析整列并转为DataFrame
parsed_cols = df['code'].apply(lambda x: pd.Series(parse_code(x)))

# 合并原数据与解析结果,填充缺失值为0
result_df = pd.concat([df, parsed_cols.fillna(0).astype(int)], axis=1)

# 确保所有目标列存在(若解析结果中缺少列则补0)
target_cols = ['C', 'HD', 'HT', 'S']
for col in target_cols:
    if col not in result_df.columns:
        result_df[col] = 0

# 调整列顺序与示例一致
result_df = result_df[['id', 'code', 'C', 'HD', 'HT', 'S']]
print(result_df)

代码说明

  • re.compile(r'(\d+)([A-Z]+)'):精准匹配字符串中"数字+大写字母"的组合,分别捕获数值和列标识
  • parse_code函数:处理单个code值,若为"0"则返回空字典,否则将匹配结果转为列名对应数值的字典
  • apply(pd.Series):将每行的字典转换为对应列的数值,缺失列自动填充NaN
  • fillna(0).astype(int):将缺失值转为0并统一为整数类型

运行代码后输出结果与示例表格完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:30:33