如何让$sort将缺失值始终排在末尾(无论升降序)
如何让缺失值在排序时始终排在末尾(无论升序/降序)
下面针对几种常用工具给出具体实现方案:
Pandas(Python)
Pandas 的 sort_values 方法自带参数可直接控制缺失值位置,无需额外处理:
- 升序排序,缺失值放末尾:
df.sort_values('目标列名', ascending=True, na_position='last') - 降序排序,缺失值放末尾:
df.sort_values('目标列名', ascending=False, na_position='last')
该参数对 NaN、NaT 等各类Pandas缺失值类型均生效。
SQL
核心思路是先区分缺失值与非缺失值,让非缺失值优先排序,再按目标列的顺序排列:
- 升序排序(以MySQL/PostgreSQL为例):
SELECT * FROM 表名 ORDER BY 目标列名 IS NULL, 目标列名 ASC; - 降序排序:
SELECT * FROM 表名 ORDER BY 目标列名 IS NULL, 目标列名 DESC;
目标列名 IS NULL 会返回 0(非缺失值)或 1(缺失值),升序排序时非缺失值会排在前面,缺失值自然被推至末尾。若需将空字符串也视为缺失值,可调整为 (目标列名 IS NULL OR 目标列名 = '')。
Excel
方法1:辅助列法
- 新增一列(比如B列),输入公式:
=IF(ISBLANK(A2),1,0)(A列为目标排序列) - 选中整个数据区域,打开「排序」对话框,先按辅助列(B列)升序排序,再按目标列(A列)选择升序/降序排序。
方法2:自定义排序选项
在Office 365或新版Excel中:
- 打开「排序」对话框,点击「选项」按钮
- 在弹出的窗口中找到「处理空值」选项,选择「将空值放在最后」,再设置目标列的排序方向即可。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

