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

Pandas:将含键值对字符串的Series高效转换为DataFrame

把键值对字符串的Pandas Series转成DataFrame的高效方法

刚好处理过类似的场景,针对这种每个元素都是多行键值对字符串的Series,我推荐两种高效方案,根据你的数据量来选:

方法一:直观通用的字典转换法(适合小数据量)

这种方法逻辑清晰,容易理解和调试,适合数据量不大的情况:

首先先定义示例数据方便测试:

import pandas as pd

# 你的目标Series
s = pd.Series([
    """Customer Name - Eric
Family Name - Lammela
Shirt color - white
""",
    """Customer Name - Leo
Family Name - Messi
Pants color - black
"""
])

然后写一个解析函数,把单个字符串转成字典,再批量转换:

def parse_key_value_str(content):
    # 按换行拆分字符串,过滤掉空行(比如末尾的换行)
    lines = [line.strip() for line in content.split('\n') if line.strip()]
    # 每行按' - '拆分一次(避免值里包含'-'导致拆分错误),生成键值对字典
    return dict(line.split(' - ', 1) for line in lines)

# 把Series里的每个元素转成字典,再转成DataFrame
result_df = pd.DataFrame(s.apply(parse_key_value_str).tolist())

运行后你会得到自动对齐字段的DataFrame,缺失的字段会填充NaN,完美适配字段不固定的场景。

方法二:矢量化正则提取法(适合大数据量,效率更高)

如果你的Series有上万甚至更多条数据,上面的apply本质是Python循环,效率会打折扣。这时候用Pandas的矢量化正则操作会快很多:

# 先把Series转成带索引的临时DataFrame
temp_df = s.to_frame(name='raw_text')

# 用正则提取所有键值对,命名分组方便后续处理
# 正则匹配:非贪婪匹配键,然后匹配任意空格+'-'+任意空格,再匹配值
matches = temp_df['raw_text'].str.extractall(r'(?P<key>.+?)\s*-\s*(?P<value>.+)')

# 把提取结果从长格式转成宽格式,自动对齐不同字段
result_df = matches.reset_index(level=1, drop=True).unstack('key')

# 清理列名,去掉多层索引
result_df.columns = result_df.columns.droplevel(0)

这个方法全程用Pandas的矢量化API,底层是C实现的,比Python循环快几倍甚至几十倍,非常适合大数据量场景。

额外注意点

  • 如果你的键值对分隔符不是严格的' - '(比如有的是-前后空格数不一样,或者用了其他分隔符),可以调整正则表达式来适配,比如上面的\s*-\s*就是匹配任意空格的-分隔符。
  • 如果值里可能包含换行(虽然你的示例里没有),那需要调整正则或者预处理逻辑,不过你的场景里应该不需要考虑这个。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:37:18