如何将字符串形式的字典列安全解析并展开为多列
技术百科
聖光之護
发布时间:2026-01-25
浏览: 次 本文介绍如何在 python 中安全地将 dataframe 中存储为字符串的字典(如 `"{827056812014862: [0.05, 0.0608, 0.476464, 0.53535]}"`)解析为结构化表格,提取键为 `id`、列表元素依次映射为 `t1`, `t2`, `t3`, `t4` 等独立列。
在实际数据处理中,常遇到将嵌套结构以字符串形式存储于单列的情况(例如日志导出、API 响应或低规范数据库导出)。直接使用 eval() 解析存在严重安全风险,推荐使用 ast.literal_eval() —— 它仅支持安全的字面量(如 dict、list、float、int、str),可有效防止代码注入。
以下是一个完整、健壮的解决方案:
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 标准化预处理场景。
# ai
# 是一个
# 大数据
# 结构化
# python
# 数据清洗
# 适用于
# 数据处理
# 推荐使用
# 所示
# 性能优化
# app
# 可执行
# 如何在
# js
# json
# int
# 字符串
# 数据库
# try
# for
# Float
# etl
# pandas
# 原始数据
# 需注意
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- php订单日志怎么记录发货_php记录订单发货操作
- Win11怎样安装搜狗输入法_Win11安装搜狗输
- 如何在 Go 中正确测试带 Cookie 的 HT
- windows 10专注助手怎么关闭_window
- 如何在Golang中实现CI/CD流水线自动化测试
- Win11怎么清理C盘系统错误报告_Win11清理
- Win11如何连接Xbox手柄 Win11蓝牙连接
- Win11怎么关闭右下角弹窗_Win11拦截系统通
- 如何使用Golang sort排序切片_Golan
- Mac如何修改Hosts文件?(本地开发与屏蔽网站
- 如何使用Golang实现文件加密_Golang c
- 如何使用Golang实现微服务事件驱动_使用消息总
- Win10怎样安装Word样式库_Win10安装W
- 如何在 Go 结构体中正确初始化 map 字段
- LINUX如何开放防火墙端口_Linux fire
- Windows Defender扫描失败怎么办_安
- Mac的“调度中心”与“空间”怎么用_Mac多桌面
- PythonPandas数据分析教程_数据清洗与处
- MAC怎么在照片中添加水印_MAC自带编辑工具文字
- Windows10如何更改盘符名称_Win10重命
- C++ static_cast和dynamic_c
- Python列表推导式与字典推导式教程_简化代码高
- Windows10无法识别USB设备描述符请求失败
- MAC怎么一键隐藏桌面所有图标_MAC极简模式切换
- C#怎么创建控制台应用 C# Console Ap
- Windows蓝屏错误0x0000001E怎么修复
- Windows10怎么备份注册表_Windows1
- c++怎么用jemalloc c++替换默认内存分
- Go 中 defer 在 goroutine 内部
- php能跑在stm32上吗_php在stm32微控
- Win11如何关闭小娜Cortana Win11禁
- C++如何将C风格字符串(char*)转换为std
- Windows10系统更新错误0x80070002
- Win11怎么设置系统还原_Windows11系统
- 如何理解Go指针和内存分配关系_Go Pointe
- php订单日志怎么按状态筛选_php筛选不同状态订
- Win11怎么恢复误删照片_Win11数据恢复工具
- C++ STL算法库怎么用?C++常用算法函数(s
- php能控制zigbee模块吗_php通过串口与c
- 手机php怎么转mp4_手机端php文件转mp4a
- Win11怎么关闭系统透明度_Windows11个
- Python多线程使用规范_线程安全解析【教程】
- Win10路由器怎么隐藏ssid Win10隐藏w
- php怎么连接数据库_MySQL数据库连接的基础代
- 如何优化Golang内存分配与GC调度_Golan
- Windows10系统怎么查看显卡驱动_Win10
- Mac如何修复应用程序权限问题_Mac磁盘工具修复
- Windows系统被恶意软件破坏后的恢复策略_错误
- Win11怎么设置夜间模式_Windows11显示
- Go 中 defer 语句在 goroutine


QQ客服