为什么pandas中value_counts()的长度与shape[0]返回记录数不一致?
Pandas两种统计方式结果差异原因
shape[0]的统计逻辑是直接返回筛选后DataFrame的全部有效记录行数,不会对行内容做任何额外过滤或去重,3186就是你筛选得到的数据集的真实总记录数。value_counts()的运行逻辑和默认参数是导致结果变小的核心原因:- 它本质是统计「所有列取值完全相同的重复行」的出现频次,返回结果的长度代表的是去重后的唯一行组合的数量,不是总行数。
- 它默认开启
dropna=True参数,只要某一行存在任意一个空值(NaN),就会被直接排除在统计结果之外,不会被计数。
你可以通过以下代码验证差异来源:
# 先提取筛选后的数据集 filtered_df = df.loc[(df['rental_store_city'] == 'Woodridge') & (df['film_rental_duration'] > 5)] # 统计包含空值的行数 print("包含空值的行总数:", filtered_df.isna().any(axis=1).sum()) # 统计去重后的唯一行总数(保留空值行) print("去重后唯一行总数:", filtered_df.drop_duplicates().shape[0]) # 关闭空值过滤后统计value_counts长度 print("关闭空值过滤的value_counts长度:", filtered_df.value_counts(dropna=False).shape[0])
内容的提问来源于stack exchange,提问作者beanpicker
相关产品推荐
相关产品推荐

