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

如何在Pandas DataFrame中提取字符串型键值对的首组键与值

Pandas提取字符串中第一组键值对解决方案

问题说明

给定如下Pandas DataFrame:

import pandas as pd
df = pd.DataFrame({'col_1': ['1', '2', '3', '4'],
                   'col_2': ['a:b,c:d', ':v', 'w:,x:y', 'f:g,h:i,j:']
                   })

需要从col_2的字符串中提取第一组键值对,分别存入col_3(键)和col_4(值),得到期望输出:

pd.DataFrame({'col_1': ['1', '2', '3', '4'],
              'col_2': ['a:b,c:d', ':v', 'w:,x:y', 'f:g,h:i,j:'],
              'col_3': ['a','','w','f'],
              'col_4': ['b','v','','g']
               })

原代码问题

你之前的代码直接对整个字符串按冒号分割,会把所有冒号都拆分,比如'a:b,c:d'会被分成['a', 'b,c', 'd'],取索引1得到的是'b,c',不符合只取第一组的需求。

可行解决方案

方法1:用Pandas字符串方法(高效推荐)

先按逗号拆分取第一组,再按冒号拆分键和值,用fillna('')处理空值情况:

# 提取逗号分隔的第一组键值对
first_kv = df['col_2'].str.split(',').str[0]
# 拆分键到col_3
df['col_3'] = first_kv.str.split(':').str[0]
# 拆分值到col_4,空值填充为''
df['col_4'] = first_kv.str.split(':').str[1].fillna('')

方法2:自定义函数+apply(灵活适配特殊场景)

如果需要处理值中包含冒号的情况,用split(':', 1)只拆分一次:

def get_first_key_value(s):
    # 取第一组键值对
    first_part = s.split(',')[0]
    # 只按第一个冒号拆分
    parts = first_part.split(':', 1)
    # 处理拆分后的长度,确保键值都有值(空字符串)
    key = parts[0] if len(parts) >= 1 else ''
    value = parts[1] if len(parts) >= 2 else ''
    return key, value

# 应用函数并展开为两列
df[['col_3', 'col_4']] = df['col_2'].apply(lambda x: pd.Series(get_first_key_value(x)))

验证结果

运行上述任意一种方法后,输出结果与期望一致:

col_1          col_2 col_3 col_4
0     1      a:b,c:d     a     b
1     2            :v           v
2     3      w:,x:y     w       
3     4  f:g,h:i,j:     f     g

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:48:20