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

在Pandas DataFrame中拆分脏数据标签并提取指定字段

问题描述

原始Pandas DataFrame示例:

Column1 Column2 Tags                      Column3
str1    str2    owner:u1,env:prod1        str3
str2    str4    env:prod2,env:prod2       str6
str1    str3                              str7
str3    str4    dwdws:qsded,ewe:22w       str8

需满足以下要求:

  • 保留完整数据集,不能过滤数据
  • Tags列可能为空字符串
  • 键值对存在重复情况

目标是将owner和env标签提取为单独列,期望输出:

Column1 Column2 Tags                      Column3  Owner env
str1    str2    owner:u1,env:prod1        str3     u1    prod1
str2    str4    env:prod2,env:prod2       str6           prod2
str1    str3                              str7     
str3    str4    dwdws:qsded,ewe:22w       str8       

尝试过以下代码但结果全为NaN:

Data['owner']=Data['Tags'].str.slice(Data.Tags.str.find('owner:'),Data.Tags.str.find('owner:')+<length until comma after owner is reached>) 

需要用一两行代码解决该问题。


解决方案

使用str.extract结合正则表达式可以直接提取目标标签,自动处理空值和重复键:

Data[['Owner', 'env']] = Data['Tags'].str.extract(r'(?:.*owner:([^,]+))?.*(?:.*env:([^,]+))?')

说明:

  • 正则表达式(?:.*owner:([^,]+))?匹配owner:后直到逗号的内容,?表示该组可选(处理无owner的行)
  • (?:.*env:([^,]+))?同理匹配env:的内容,若存在重复的env键,会提取最后一次出现的值(与示例结果一致)
  • str.extract会自动为未匹配到的行填充空值,无需额外处理空标签的情况

如果需要提取第一个出现的重复键值,调整正则为:

Data[['Owner', 'env']] = Data['Tags'].str.extract(r'(?:owner:([^,]+))?.*?(?:env:([^,]+))?')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:41:30