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

Pandas如何拆分DataFrame文本列键值对到对应新列并转数值类型

Pandas拆分键值对列并自动转数值类型实现方案

核心思路

针对CODES列里分号分隔的键值对格式,逐行清理脏字符、拆分键值、自动识别转换数值类型,最后和原表保留列拼接得到目标结果,对不规范的空格、末尾多余逗号有较好的容错性。

可直接运行的完整代码

import pandas as pd
import numpy as np

# 构造原始示例DataFrame
data = {'CODES': ['ABC=V; XZE=6,0; FYK=5,0',
                  'RTK=6,0;XZE=6,0',
                  'FYK=5,0; RTK=6,0;ABC=V,'],
        'CUSTOMER': ['CUSTOMER1','CUSTOMER2,','CUSTOMER3',]
        }
CUSTOMERCODES = pd.DataFrame(data)

# 定义逐行拆分处理函数
def parse_code_col(row):
    # 按分号拆分键值对,清理前后空格、末尾冗余逗号
    kv_list = [item.strip().rstrip(',') for item in row['CODES'].split(';')]
    parsed = {}
    for kv in kv_list:
        if '=' not in kv:
            continue
        # 按等号拆分键和值,只拆分一次避免值内包含等号的异常
        key, val = kv.split('=', 1)
        key = key.strip()
        val = val.strip().rstrip(',')
        # 替换欧式小数的逗号为点,尝试转浮点型
        val = val.replace(',', '.')
        try:
            val = float(val)
        except ValueError:
            # 转换失败则保留原始字符串值
            pass
        parsed[key] = val
    return pd.Series(parsed)

# 应用拆分函数,拼接保留的CUSTOMER列
parsed_codes = CUSTOMERCODES.apply(parse_code_col, axis=1)
CUSTOMERCODES2 = pd.concat([parsed_codes, CUSTOMERCODES[['CUSTOMER']]], axis=1)

关键处理细节

  • 提前做字符清理:统一处理键值对前后的不一致空格、末尾多余逗号(比如示例数据中ABC=V,末尾的冗余逗号、 XZE=6,0前的空格),避免拆分出错
  • 数值自动转换:把欧式格式小数的逗号替换为点号后,用异常捕获逻辑判断值是否可转为数值,可转的统一转为float类型,不可转的文本值(比如示例里的V)保留原字符串格式
  • 缺失值自动填充:某行不存在的编码键会自动填充np.NaN,和目标结构完全匹配

输出结果校验

运行后得到的CUSTOMERCODES2结构和预期完全一致:

  • ABC列:['V', np.NaN, 'V']
  • XZE列:[6.0, 6.0, np.NaN]
  • FYK列:[5.0, np.NaN, 5.0]
  • RTK列:[np.NaN, 6.0, 6.0]
  • CUSTOMER列:保留原始值无修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:36:18