Pandas DataFrame 分组聚合中处理 JSON 列的高效方法

当对包含 json(字典/列表)类型列的 dataframe 进行 groupby 时,因字典不可哈希会报错;本文介绍无需序列化/反序列化即可安全、高效完成分组聚合的推荐方案。 当对包含 json(字典/列表)类型列的 dataframe 进行 groupby 时,因字典不可哈希会报错;本文介绍无需序列化/反序列化即可安全、高效完成分组聚合的推荐方案。在 Pandas 中,对含嵌套结构(如字典、列表)的列执行 groupby 操作时,常遇到 TypeError: unhashable type: 'dict' 错误------这是因为 groupby 默认将分组键视为哈希对象,而 Python 字典和列表是可变且不可哈希的。虽然将 JSON 列临时转为字符串(json.dumps)再分组是一种常见 workaround,但该方法存在明显缺陷:引入额外的序列化开销、可能因浮点精度或键序差异导致逻辑不等价的 JSON 被判为不同键、且需手动管理来回转换,易出错且可读性差。更专业、更健壮的解决方案是:避免将 JSON 列作为分组键,而是将其作为被聚合的值,并选用语义明确、无副作用的聚合函数(如 'first'、'last' 或自定义函数)。只要同一分组内 JSON 内容逻辑一致(如示例中两行 json 完全相同),直接取首个即可保留原始结构,且完全规避哈希问题。以下为推荐实现:import pandas as pdimport json# 构造示例数据json_data = { "employees": {"name": "Shyam", "email": "shyam@example.com"}, {"name": "Bob", "email": "bob@example.com"}, {"name": "Jai", "email": "jai@example.com"}, }df = pd.DataFrame({ "key": "A", "A", "val": 1, 2, "json": json_data, json_data # 注意:两行内容完全相同})# ? 推荐做法:以 'key' 为分组键,对 'val' 聚合为列表,对 'json' 取首个(保证结构完整)df_grouped = df.groupby("key").agg({ "val": list, "json": "first" # 安全、高效、保持原生类型}).reset_index()print(df_grouped)输出结果: 文小言 百度旗下新搜索智能助手,有问题,问小言。

相关推荐
这个DBA有点耶5 分钟前
期货 CTP 系统 Oracle RAC 迁移国产库实战:读写分离架构设计与性能对标
数据库·架构·dba
数据库安全11 分钟前
AI数据访问安全 |如何控制AI访问权限,防止越权
数据库·安全
这个DBA有点耶1 小时前
Redo Log循环写与checkpoint推进:长事务阻塞下的Checkpoint风暴完整链路
数据库·mysql·代码规范
jnrjian1 小时前
pg_waldump --key-file-name status 查看wal 产生的db
数据库
学Linux的语莫1 小时前
python中类的常见写法
开发语言·python·状态模式
需要8261 小时前
容器化 Java:镜像瘦身与 JVM 容器感知(cgroup)
java·开发语言·jvm
垆边人似月.2 小时前
Python中如何使用get函数实现频次查询
服务器·前端·python
SelectDB技术团队2 小时前
Snowflake 的开源替代怎么选:能力对照、三条部署路径与迁移执行
大数据·数据库·云原生·开源·snowflake·apache doris
Elastic 中国社区官方博客2 小时前
告别繁琐控制台:Kabanos 如何将 MongoDB Compass 的易用性带入 Elasticsearch
大数据·数据库·mongodb·elasticsearch·搜索引擎·全文检索
AI 编程助手GPT2 小时前
GPT 脚本别只发一个文件:用 uv 把依赖和锁一起交付
人工智能·python·gpt·uv·依赖管理