如何将Pandas存储键值对字符串的Series转换为结构化DataFrame
实现Pandas Series转结构化DataFrame的方法
核心思路
不需要对分隔符做拆分,直接通过正则匹配所有合法键值对,从根源避免值内包含分隔符导致的拆分错误。
完整实现代码
import pandas as pd # 构造示例输入Series s = pd.Series([ "key1=value1 key2=value2 key3=value3", "key1=value 11 key2=value22 key3=value33", "key1=value111,key2=value222,key3=value333" ]) # 核心转换逻辑 # 正则匹配所有键值对,分别捕获键和值 df = s.str.extractall(r'(\w+)=([^=]+?)(?=\s*\w+=|$)')\ .set_index(0, append=True)[1]\ .unstack()\ .reset_index(level='match', drop=True) # 清理值末尾多余的逗号、空格 df = df.apply(lambda col: col.str.rstrip(', '))
输出结果验证
打印df即可得到符合要求的结构,原始索引会完全保留:
key1 key2 key3 0 value1 value2 value3 1 value 11 value22 value33 2 value111 value222 value333
正则逻辑说明
(\w+):匹配键名,支持字母、数字、下划线组合=:匹配键和值的分隔等号([^=]+?):非贪婪匹配值内容,允许值包含空格、逗号等除了等号之外的任意字符(?=\s*\w+=|$):正向预查,确保值的结束位置是下一个键的起始位置或者字符串结尾,不会把后续键名误拆到当前值中
内容的提问来源于stack exchange,提问作者Leon Adams
相关产品推荐
相关产品推荐

