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

如何对pandas DataFrame列空值分布统计结果排序,使空值排在最前

解决代码

首先你的原代码中value_counts()默认会丢弃空值,第一步需要加dropna=False参数把空值纳入统计,之后通过统一的排序逻辑就能同时兼容整数、object、布尔类型的列,不需要做复杂的分支判断,打印语句必须放在排序逻辑之后,先处理排序再输出结果:

import pandas as pd

total_cnt = len(df)
# 遍历所有存在空值的列
for col in df.columns[df.isnull().any()]:
    print('-' * 20)
    print('Column Name:', col)
    print('-' * 20)
    # 统计值数量和占比,包含空值
    val_cnt = df[col].value_counts(dropna=False)
    val_pct = val_cnt * 100 / total_cnt
    
    # 统一排序逻辑:空值排最顶部,其余值按本身规则升序排列
    sort_key = val_cnt.index.to_series().apply(lambda x: -1 if pd.isna(x) else x)
    sorted_cnt = val_cnt.loc[sort_key.argsort()]
    sorted_pct = val_pct.loc[sort_key.argsort()]
    
    # 排序完成后打印
    print(sorted_cnt)
    print(sorted_pct)

疑问解答

  • 布尔类型不会增加实现难度,上面的排序逻辑对三类数据类型全部适用:整数列空值排最前,其余整数按大小升序排列;object列空值排最前,其余字符串按字典序排列;布尔列空值排最前,之后先显示False再显示True。
  • 如果你需要针对不同类型做定制化排序规则,可以再加if/else分支调整,示例结构如下:
col_dtype = df[col].dtype
if col_dtype == 'int64':
    # 整数列专属排序逻辑,比如非空值按降序排列
    pass
elif col_dtype == 'object':
    # object列专属排序逻辑
    pass
else:
    # 其他类型默认逻辑
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:45:03