如何去除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
相关产品推荐
相关产品推荐

