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

Python:如何移除DataFrame中counts列内的零值?

解决方案

先模拟一个和你场景匹配的数据集,方便对照:

import pandas as pd
from collections import Counter

# 模拟你的DataFrame
df = pd.DataFrame({
    'samples': ['sample1', 'sample2', 'sample3'],
    'results': [[0,1,1,2], [2,3,3,3], [0,0,0,0]]
})

假设你原本生成counts列的代码是这样(强制统计0、1、2、3的出现次数,包含0次的情况):

def f(lst):
    cnt = Counter(lst)
    return {k: cnt.get(k, 0) for k in [0,1,2,3]}

df['counts'] = df['results'].apply(f)

此时counts列的字典里会包含值为0的键值对,比如sample2的counts是{0:0,1:0,2:1,3:3},下面给两种靠谱的去除零值的方法:

方法1:生成counts时直接过滤零值

修改统计函数,只保留出现次数大于0的键值对,从源头解决问题:

def f(lst):
    cnt = Counter(lst)
    # 只保留0-3中实际出现过的数,自动排除0次项
    return {k: cnt[k] for k in [0,1,2,3] if cnt.get(k, 0) > 0}

df['counts'] = df['results'].apply(f)

处理后sample2的counts会变成{2:1,3:3},sample3的是{0:4},完全符合需求。

方法2:对已有的counts列批量处理

如果已经生成了带零值的counts列,直接用lambda遍历过滤每个字典:

df['counts'] = df['counts'].apply(lambda d: {k:v for k,v in d.items() if v != 0})

这个方法不依赖原生成逻辑,不管你之前怎么得到的counts列,都能直接清理掉零值项。

关于你的trim_zeros_in_rows失效原因

大概率是函数逻辑不对——比如你误用了numpy的trim_zeros(它是移除数组首尾的零,不是字典里的零值),或者没遍历到每个字典的键值对做过滤。上面两种方法都是直接针对字典的键值对判断,肯定能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:01:19