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

如何移除pandas DataFrame中唯一值不足10的含列表列?

解决Pandas DataFrame含列表列时的列筛选问题

嘿,这个问题我碰到过好几次了,核心就是得先把那些不可哈希的列表转换成pandas能处理的类型,同时还要搞定列表顺序不同但元素相同的情况,毕竟你说[1,2]和[2,1]得算同一个值对吧?

咱们一步一步来:

第一步:写个转换函数,把列表变成可哈希且排序的元组

因为pandas计算唯一值的时候依赖哈希,而列表是不可哈希的,所以我们得把每个单元格里的列表转成排序后的元组——排序是为了让元素相同但顺序不同的列表变成同一个元组,这样它们就会被算作同一个唯一值了。函数长这样:

def normalize_list_cell(cell):
    # 检查单元格是不是列表,是的话转成排序后的元组,不是就原样返回
    if isinstance(cell, list):
        return tuple(sorted(cell))
    return cell

第二步:批量计算每一列的有效唯一值数量

接下来我们对DataFrame的每一列应用这个转换函数,然后计算处理后的唯一值数量。这样不管列里是普通数据还是列表,都能正常统计:

# 遍历每一列,先转换单元格再统计唯一值数量
unique_counts = df.apply(lambda col: col.apply(normalize_list_cell).nunique())

第三步:筛选保留符合条件的列

最后我们只保留那些唯一值数量≥10的列就行,完全不用手动指定列名,1400列也能自动处理:

# 只保留唯一值数量不少于10的列
filtered_df = df.loc[:, unique_counts >= 10]

这样操作下来,既解决了“unhashable type: 'list'”的错误,又把[1,2]和[2,1]算作了同一个值,还自动遍历了所有列完成筛选,完美匹配你的需求~

内容的提问来源于stack exchange,提问作者EnnFour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:33:42