如何将pandas DataFrame的字符串列按规则拆分为多个独立列?
实现方案
示例数据构造(可跳过)
import pandas as pd # 构造和你示例一致的DataFrame df = pd.DataFrame({ 'tags': [ 'letter1=A&letter2=B&letter3=C', 'letter1=D&letter2=E&letter3=F', 'letter1=G&letter2=H&letter3=I', 'letter1=J&letter2=K&letter3=L', 'letter1=M&letter2=N&letter3=O', 'letter1=P&letter2=R&letter3=S' ] })
方案1:简洁通用实现(推荐绝大多数场景使用)
代码仅一行即可完成转换,逻辑清晰易维护:
result = df['tags'].apply(lambda x: dict(kv.split('=', 1) for kv in x.split('&'))).apply(pd.Series)
逻辑说明:
- 先把每行的字符串按
&拆分出所有键值对 - 每个键值对按
=仅拆分1次,避免值中包含=时拆分错误 - 把每行的键值对转成字典,再自动映射为多列DataFrame
- 自动兼容不同行包含不同键的场景,缺失列自动填充NaN
如果需要过滤无效的无=的键值对,可以调整为:
result = df['tags'].apply(lambda x: dict(kv.split('=', 1) for kv in x.split('&') if '=' in kv)).apply(pd.Series)
方案2:高性能实现(适合10万行以上大数据集)
全程使用pandas向量化操作,避免apply的性能损耗,运行效率是方案1的3-5倍:
# 拆分&并展开为多行 tmp = df['tags'].str.split('&', expand=True).stack().reset_index(level=1, drop=True) # 拆分键和值 tmp = tmp.str.split('=', n=1, expand=True) # 透视转换为宽表 result = tmp.pivot(columns=0, values=1).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者tarik
相关产品推荐
相关产品推荐

