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

如何去除Pandas读取Excel转字典后值的引号,转为字典类型?

解决字符串格式字典转为实际字典的问题

这里提供两种可行的处理方案,根据你的数据规模和习惯选择即可:

方案一:生成字典后统一处理(直观易实现)

拿到目标字典后,遍历所有属性值,用ast.literal_eval把字符串格式的字典解析为实际字典对象——这个方法比直接用eval更安全,不会执行字符串中的恶意代码。

代码示例:

import ast
from collections import defaultdict

# 你的原始字典结果
original_dict = {'tim': {'density': "{'option': 'constant', 'value': 2300.0}",
                         'specific_heat': "{'option': 'constant', 'value': 1000.0}",
                         'thermal_conductivity': "{'option': 'constant', 'value': 2.7}"}}

processed_dict = defaultdict(dict)
for material, props in original_dict.items():
    for prop_name, prop_str in props.items():
        # 解析字符串为字典
        processed_dict[material][prop_name] = ast.literal_eval(prop_str)

# 转为普通字典(可选,根据需求决定)
processed_dict = dict(processed_dict)

方案二:读取Excel时提前处理(高效省资源)

在DataFrame阶段就完成转换,避免后续再遍历大字典,适合数据量较大的场景。利用applymap对所有单元格批量处理:

修改后的读取代码:

import pandas as pd
import ast

# 读取Excel并转置
df = pd.read_excel('Simulation log.xlsx', sheet_name='Materials').transpose()
# 重命名列名
df = df.rename(columns=df.iloc[1])

# 跳过前两行(表头相关行),将所有字符串格式的字典转为实际字典
df = df.iloc[2:].applymap(lambda x: ast.literal_eval(x) if isinstance(x, str) else x)

# 最终转字典
result_dict = df.to_dict('index')

方案对比

  • 小数据量场景:选方案一,代码逻辑更直接,不需要调整读取流程。
  • 大数据量场景:选方案二,在数据加载阶段完成转换,减少内存占用和后续遍历开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:42:11