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

求助:如何将DataFrame中的字符串列拆分转换为多列

DataFrame字符串列转多列的解决方案

问题场景

原始DataFrame包含一列字符串数据:

col
a: 1, b: 2, c: 3
b: 1, c: 3, a: 4
c: 2, b: 4, a: 3

需要将其转换为如下多列结构:

a   b   c
1   2   3
4   1   3
3   4   2

目前尝试将列数据转为字典并排序,考虑用透视表实现,以下提供几种可行方案:

方案1:字典转换法(贴合你的思路)

直接把每行字符串转换成键值对字典,再展开为DataFrame列,无需透视表:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'col': ['a: 1, b: 2, c: 3', 'b: 1, c: 3, a: 4', 'c: 2, b: 4, a: 3']
})

# 字符串转字典函数
def str_to_dict(s):
    pairs = s.split(', ')
    return {k.strip(): int(v.strip()) for k, v in [p.split(': ') for p in pairs]}

# 应用函数并展开为多列
result = df['col'].apply(str_to_dict).apply(pd.Series)
# 固定列顺序(可选)
result = result[['a', 'b', 'c']]

print(result)

方案2:正则提取+透视表(高效适合大数据)

用正则批量提取所有键值对,再通过透视表转为宽表,和你考虑的思路匹配:

import pandas as pd

df = pd.DataFrame({
    'col': ['a: 1, b: 2, c: 3', 'b: 1, c: 3, a: 4', 'c: 2, b: 4, a: 3']
})

# 提取所有键值对,生成包含索引、键、值的长表
extracted = df['col'].str.extractall(r'(\w+): (\d+)')
extracted.columns = ['key', 'value']

# 透视转宽表
result = extracted.reset_index().pivot(index='level_0', columns='key', values='value').astype(int)
result.columns.name = None  # 移除列名层级

print(result)

方案3:拆分爆炸法(简洁写法)

通过拆分字符串、爆炸行再透视实现:

import pandas as pd

df = pd.DataFrame({
    'col': ['a: 1, b: 2, c: 3', 'b: 1, c: 3, a: 4', 'c: 2, b: 4, a: 3']
})

# 拆分每行成键值对列表,爆炸为单行一个键值对
temp = df['col'].str.split(', ', expand=True).stack().reset_index(level=1, drop=True)
# 拆分键和值
temp = temp.str.split(': ', expand=True)
# 透视转宽表
result = temp.pivot(columns=0, values=1).astype(int)
result.columns.name = None

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:30:50