如何将字符串形式的字典列安全解析并展开为多列
发布时间 - 2026-01-25 00:00:00 点击率:次本文介绍如何在 python 中安全地将 dataframe 中存储为字符串的字典(如 `"{827056812014862: [0.05, 0.0608, 0.476464, 0.53535]}"`)解析为结构化表格,提取键为 `id`、列表元素依次映射为 `t1`, `t2`, `t3`, `t4` 等独立列。
在实际数据处理中,常遇到将嵌套结构以字符串形式存储于单列的情况(例如日志导出、API 响应或低规范数据库导出)。直接使用 eval() 解析存在严重安全风险,推荐使用 ast.literal_eval() —— 它仅支持安全的字面量(如 dict、li

以下是一个完整、健壮的解决方案:
import pandas as pd
from ast import literal_eval
# 示例原始数据
df = pd.DataFrame({
"column_A": [
"{827056812014862: [0.05, 0.0608, 0.476464, 0.53535]}",
"{263746262748835: [0.08, 0.0333, 0.8263, 0.9463]}",
"{63673738736362: [0.05, 0.0926, 0.8694, 0.9903]}",
"{73737681201484: [0.08, 0.0425, 0.1948, 0.3958]}"
]
})
# 安全解析 + 展开为标准 DataFrame
records = []
for s in df["column_A"]:
try:
d = literal_eval(s) # 安全转换字符串为 dict
for key, values in d.items():
if isinstance(values, (list, tuple)) and len(values) == 4:
records.append({
"id": key,
"t1": values[0],
"t2": values[1],
"t3": values[2],
"t4": values[3]
})
else:
raise ValueError(f"Unexpected value format: {values}")
except (ValueError, SyntaxError) as e:
print(f"Warning: Skipping invalid string '{s}' — {e}")
continue
result = pd.DataFrame(records)
print(result)✅ 输出结果与预期一致:
id t1 t2 t3 t4 0 827056812014862 0.05 0.0608 0.476464 0.53535 1 263746262748835 0.08 0.0333 0.826300 0.94630 2 63673738736362 0.05 0.0926 0.869400 0.99030 3 73737681201484 0.08 0.0425 0.194800 0.39580
? 关键注意事项:
- ✅ 永远避免 eval():它可执行任意 Python 表达式,存在严重安全隐患;literal_eval() 是唯一推荐替代方案。
- ⚠️ 添加异常处理:真实数据中可能存在格式错误、空值或长度不一致的列表,务必用 try/except 包裹解析逻辑。
- ? 扩展性建议:若列表长度不固定,可用 **{f"t{i}": v for i, v in enumerate(values, 1)} 动态生成列名(如答案中所示),再通过 pd.json_normalize() 或 pd.concat() 统一列结构。
- ? 性能优化(大数据量):对超大规模数据,可改用 apply + pd.Series 向量化展开(需确保每行仅含一个 key-value 对),但需注意内存开销。
该方法兼顾安全性、可读性与工程鲁棒性,适用于 ETL 流程、数据清洗及 Pandas 标准化预处理场景。
# python
# js
# json
# 大数据
# app
# ai
# 数据清洗
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
如何用景安虚拟主机手机版绑定域名建站?
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
如何在阿里云部署织梦网站?
5种Android数据存储方式汇总
米侠浏览器网页背景异常怎么办 米侠显示修复
如何在云主机上快速搭建多站点网站?
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
如何在Tomcat中配置并部署网站项目?
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Laravel如何升级到最新版本?(升级指南和步骤)
EditPlus中的正则表达式实战(5)
C++用Dijkstra(迪杰斯特拉)算法求最短路径
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
Laravel Session怎么存储_Laravel Session驱动配置详解
如何在云服务器上快速搭建个人网站?
网站制作企业,网站的banner和导航栏是指什么?
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
JS弹性运动实现方法分析
网站优化排名时,需要考虑哪些问题呢?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何快速生成橙子建站落地页链接?
C#如何调用原生C++ COM对象详解
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
Python自动化办公教程_ExcelWordPDF批量处理案例
Linux系统命令中tree命令详解
Laravel如何实现API速率限制?(Rate Limiting教程)
香港服务器如何优化才能显著提升网站加载速度?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
JS经典正则表达式笔试题汇总
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
北京企业网站设计制作公司,北京铁路集团官方网站?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
如何在 Pandas 中基于一列条件计算另一列的分组均值
高端建站三要素:定制模板、企业官网与响应式设计优化
北京网站制作的公司有哪些,北京白云观官方网站?
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
UC浏览器如何设置启动页 UC浏览器启动页设置方法
如何实现建站之星域名转发设置?
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
如何快速完成中国万网建站详细流程?
原生JS获取元素集合的子元素宽度实例

