如何用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):将每行的字典转换为对应列的数值,缺失列自动填充NaNfillna(0).astype(int):将缺失值转为0并统一为整数类型
运行代码后输出结果与示例表格完全一致。
内容的提问来源于stack exchange,提问作者Jresearcher
相关产品推荐
相关产品推荐

