Pandas删除指定行后value_counts仍显示已删除值计数为0如何解决
原因说明
这个现象和df_minus_ferrets是否为原DataFrame的视图无关,核心原因是你的species_col列为分类(Categorical)数据类型,而非普通的字符串object类型。
分类类型的核心特性是会固定保留初始化时定义的所有类别枚举值,即便对应类别的行已经被全部删除,这些类别依然会保留在列的元信息里。value_counts()默认会对所有保留的类别做统计,没有数据的类别计数就会显示为0。
你可以执行以下代码验证列的类型:
print(df_minus_ferrets['species_col'].dtype)
如果输出结果为category即可确认上述判断。
解决方案
有两种常用方式可以让已删除的类别不显示在计数结果中:
- 调用
value_counts()时添加observed=True参数,仅统计数据中实际存在的类别:
df_minus_ferrets['species_col'].value_counts(observed=True)
- 先删除分类列中未使用的类别,再做统计:
# 移除所有没有对应数据的类别 df_minus_ferrets['species_col'] = df_minus_ferrets['species_col'].cat.remove_unused_categories() # 再调用value_counts就不会出现已删除的ferret类别 df_minus_ferrets['species_col'].value_counts()
内容的提问来源于stack exchange,提问作者Lucy Goosey
相关产品推荐
相关产品推荐

