求助:如何将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
相关产品推荐
相关产品推荐

