如何在Python中对DataFrame进行降序排序_使用sort_values设置ascending

阿丽大大_5338

阿丽大大_5338

2026-05-12

363人浏览

原创

sort_values降序必须显式设ascending=false;多列排序时ascending需等长列表;inplace=true易引发隐性bug;nan默认排末尾,用na_position控制位置。

如何在python中对dataframe进行降序排序_使用sort_values设置ascending

sort_values 降序排序必须显式设 ascending=False

很多人以为不写 ascending 参数就默认升序,其实没错——但降序必须主动写 ascending=False,不写或传 None 都不会自动变成降序。Pandas 的 sort_values 默认值就是 True,这点容易被忽略,导致排序结果和预期相反。

常见错误现象:df.sort_values('age') 看起来“没排错”,但其实是升序;想看年龄最大的在最前,却得到最小的在最前。

  • df.sort_values('score', ascending=False) → 按 score 降序
  • df.sort_values(['class', 'score'], ascending=[True, False]) → class 升序、score 降序
  • 传字符串 'False' 或布尔值 0 都无效,必须是 Python 布尔 False

多列混合排序时 ascending 必须长度匹配

当按多列排序(如先按部门升序,再按工资降序),ascending 如果是单个布尔值,会统一应用到所有列;如果要分别控制,就必须传列表,且长度必须和列名列表一致,否则抛出 ValueError: Length of ascending must match length of columns。

使用场景:报表导出时经常需要“大类升序 + 小类降序”,比如部门 A 的高薪员工排前面,部门 B 的高薪员工排后面。

  • 正确:df.sort_values(['dept', 'salary'], ascending=[True, False])
  • 错误:df.sort_values(['dept', 'salary'], ascending=[False]) → 长度为 1,但列有 2 个
  • 错误:df.sort_values(['dept', 'salary'], ascending=False) → 所有列都降序,不是混合逻辑

inplace=True 不返回新 DataFrame,但原地修改有风险

加 inplace=True 看似省事,但容易引发隐性 bug:如果后续代码还依赖原始顺序(比如索引对齐、分组位置、绘图坐标),改了就回不去了。更麻烦的是,某些链式操作中 inplace=True 会失效(例如 df.query(...).sort_values(..., inplace=True) 实际不生效)。

python-code-analyz
python-code-analyz

专业Python代码分析与优化,支持语法检查、安全扫描、性能评估、复杂度分析及重构后优化代码生成。

下载

性能影响:原地修改看似省内存,但 Pandas 内部仍可能触发 copy-on-write 机制,实际收益有限;而显式赋值 df = df.sort_values(...) 语义清晰、调试友好。

  • 推荐写法:df = df.sort_values('time', ascending=False)
  • 避免写法:df.sort_values('time', ascending=False, inplace=True)
  • 注意:inplace=True 对视图(view)可能报 SettingWithCopyWarning,尤其在切片后排序时

NaN 值默认排在末尾,需用 na_position 调整

默认情况下,sort_values 把 NaN 当作最大值处理,降序时出现在最前?不对——它其实排在最后(无论 ascending=True 还是 False)。这个行为常让人困惑,尤其是想把缺失数据集中查看时。

可选值只有两个:'first' 或 'last'(字符串,不是布尔值),不支持其他写法。

  • 让 NaN 排最前:df.sort_values('price', ascending=False, na_position='first')
  • 让 NaN 排最后(默认):na_position='last' 可省略
  • 错误写法:na_position=True 或 na_position=0 → 报 ValueError

真实项目里,财务数据或用户填写字段常含大量 NaN,不显式控制 na_position,排序后第一眼看过去全是有效值,反而漏掉空值分布情况。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1651

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4124

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1649

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

23817

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2907

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2947

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1143

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2283

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程