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

Python pandas如何将存储字典的字符串列拆分为多个独立列

列内字典字符串拆分扩列问题

示例数据

输入数据结构:

import pandas as pd
df = pd.DataFrame({'column1':["{'A':2,'B':3,'c':2}", "{'A': 3, 'B': 5, 'c': 10}"]})
print(df)

输入打印结果:

column1
0  {'A': 2, 'B': 3, 'c': 2}
1  {'A': 3, 'B': 5, 'c': 10}

期望输出:将字典的键拆为独立列,对应值按行匹配

A  B   c
0  2  3   2
1  3  5  10

参考方案中*的作用

你找到的参考代码:

pd.DataFrame([*df['column1'].apply(eval)])

代码执行逻辑拆解:

  1. df['column1'].apply(eval):逐行把列内的字符串格式字典,通过eval转换为Python原生字典对象,返回值是元素为字典的pandas Series。
  2. *是Python的可迭代对象解包运算符,作用是把Series这个可迭代对象里的每个字典元素逐个展开,外层的[]会把展开的所有字典收集为一个列表。比如Series里存了d1、d2两个字典,[*series]等价于[d1, d2]。
  3. 最后传入字典列表给pd.DataFrame()时,pandas会自动将字典的公共键作为列名,逐行填充对应值,得到目标结果。

注意:eval会直接执行传入的字符串内容,如果你的CSV文件来源不可信,存在执行恶意代码的风险,不推荐生产环境使用。

更优实现方案

方案1:官方专用方法(性能最优、最安全)

使用pandas内置的json_normalize方法处理字典/JSON结构扩列,搭配ast.literal_eval做安全的字符串转字典操作(仅解析Python字面量,不会执行任意代码):

import ast
import pandas as pd

# 字符串列先安全转为字典,再自动拆分为列
result = pd.json_normalize(df['column1'].apply(ast.literal_eval))

如果你的列内本身已经存储的是字典对象而非字符串,可以直接省略apply步骤:

result = pd.json_normalize(df['column1'])

这个方案在数据量越大时性能优势越明显,比参考方案速度快2~5倍,是官方推荐的写法。

方案2:可读性优先写法

通过两次apply实现,逻辑直观不需要理解解包语法,适合小数据量场景:

import ast
result = df['column1'].apply(ast.literal_eval).apply(pd.Series)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:12:30