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

如何移除嵌套Pandas DataFrame中的重复项?

如何移除嵌套Pandas DataFrame中的重复项?

嘿,刚接触Pandas遇到这种嵌套数据的问题太正常了,我来帮你搞定这个去重难题!

你遇到的报错“unhashable dict”是因为Pandas默认的去重方法没法直接处理字典这种可变、不可哈希的类型,所以得先把嵌套的字典转成可哈希的格式,再进行去重操作。下面给你两种实用的解决方法,都能完美解决你的问题:

方法一:用JSON序列化字典(通用型,适合复杂嵌套)

我们可以把每个字典转换成JSON字符串——字符串是可哈希的,Pandas就能识别重复项了。具体代码如下:

import pandas as pd
import json

# 你的原始数据
data = {
    "some_id": "xxx",
    "some_email": "abc.xyz@somedomain.com",
    "This is Sample": [
        {"a": "22", "b": "Y", "c": "33", "d": "x"},
        {"a": "44", "b": "N", "c": "55", "d": "Y"},
        {"a": "22", "b": "Y", "c": "33", "d": "x"},
        {"a": "44", "b": "N", "c": "55", "d": "Y"},
        {"a": "22", "b": "Y", "c": "33", "d": "x"},
        {"a": "44", "b": "N", "c": "55", "d": "Y"}
    ]
}

df = pd.DataFrame(data)

# 新增辅助列:把字典转成JSON字符串
df['dict_serialized'] = df['This is Sample'].apply(json.dumps)

# 基于关键列+辅助列去重,之后删掉辅助列
df_unique = df.drop_duplicates(subset=['some_id', 'some_email', 'dict_serialized']).drop('dict_serialized', axis=1)

print(df_unique)

运行后就能得到你想要的去重结果,而且原有的字典列完全保留,没有被修改。

方法二:把字典转为排序后的元组(轻量型,适合简单字典)

如果你的字典结构比较简单,没有更深的嵌套,也可以把字典的键值对转成排序后的元组——元组是不可变可哈希的,同样能帮Pandas识别重复:

import pandas as pd

# 原始数据和DataFrame初始化同上,这里省略
df = pd.DataFrame(data)

# 新增辅助列:将字典转为排序后的键值对元组
df['dict_tuple'] = df['This is Sample'].apply(lambda x: tuple(sorted(x.items())))

# 去重后删除辅助列
df_unique = df.drop_duplicates(subset=['some_id', 'some_email', 'dict_tuple']).drop('dict_tuple', axis=1)

print(df_unique)

这里排序很重要哦,不然如果字典的键顺序不同(虽然内容一样),会被当成不同的元组,导致去重不彻底。

这两种方法都能解决你的问题,要是你的数据有更复杂的嵌套结构,优先选方法一,JSON序列化能处理绝大多数嵌套场景~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 11:18:17