Pandas DataFrame 与 Series 排序核心操作指南

洛溪
洛溪
发布时间:2026-10-12 | 1人浏览过
原创

本文详细讲解 Pandas 中 DataFrame 与 Series 的数据排序方法,涵盖基于元素值的 sort_values() 与基于索引标签的 sort_index()。通过 ascending、na_position、inplace 及 axis 等核心参数配置,实现单列/多列升降序排列、缺失值控制及原地更新操作,附带类型冲突排错指南,适用于 Python 数据分析流程中的表结构整理。

Pandas 数据排序基础与弃用警告

在 Python 数据分析中,对表格或序列数据进行重新排列是预处理的关键环节。Pandas 提供了两种核心排序方法:sort_values() 用于根据单元格数值进行排列,sort_index() 用于根据行或列的索引标签进行重排。需要注意,早期版本中存在的 sort() 方法已在现代版本中正式废弃,调用将触发警告或报错,请统一迁移至上述两个标准接口。

按元素数值排序:sort_values()

第1步:按指定列执行默认升序排列

首先载入待处理的数据集。以下以包含姓名、年龄、省份和分数的示例表为例:

import pandas as pd

df = pd.read_csv('./data/17/sample_pandas_normal.csv')
print(df)

在 sort_values() 的第一个参数 by 中传入目标列名。默认情况下,该方法会按升序排列该行数据:

df_s = df.sort_values('state')
print(df_s)

第2步:切换升序与降序模式

默认行为为升序。若需反向排序,将参数 ascending 设置为 False:

df_s = df.sort_values('state', ascending=False)
print(df_s)

第3步:配置多列组合排序优先级

当需要依据多个字段综合排序时,向 by 传递列名列表。排序优先级遵循“后者优先”原则,即列表末尾的列具有最高排序权重:

df_s = df.sort_values(['state', 'age'])
print(df_s)

若各列所需的方向不同,可直接传入布尔值列表至 ascending 参数:

df_s = df.sort_values(['age', 'state'], ascending=[True, False])
print(df_s)

第4步:控制缺失值 NaN 的显示位置

数据集中若存在空值,排序算法默认将其置于序列末尾。可通过 na_position 参数强制将它们置顶:

df_nan = df.copy()
# 修复旧版语法 pd.np.nan,现代 Pandas 推荐使用 float('nan') 或 pd.NA
df_nan.iloc[:2, 1] = float('nan')
print(df_nan)

df_nan_s = df_nan.sort_values('age', na_position='first')
print(df_nan_s)

第5步:原地修改原表数据(风险提示)

常规调用会返回新的排序对象而不影响原始变量。若需直接覆写原数据表,可将 inplace 设为 True。注意:此操作会永久改变内存中的原始数据,无法撤销。建议在执行前备份重要数据集或复制副本。

df.sort_values('state', inplace=True)
print(df)

按行方向水平排序(axis 参数配置)

前述示例均沿垂直方向(列级)排序。若需对水平方向的行元素进行排列,必须显式声明 axis=1。由于混合字符串与数值列会导致类型比较异常,建议提前剔除非数值列:

df_d = df.drop(['name', 'state'], axis=1)
print(df_d)

df_d.sort_values(by=1, axis=1, ascending=False, inplace=True)
print(df_d)

按索引标签排序:sort_index()

第1步:按行索引重排行顺序

当数据表行号杂乱无序时,直接使用 sort_index() 即可按行标签(Index)进行垂直重排。默认同样支持升序/降序切换:

print(df)
df_s = df.sort_index(ascending=False)
print(df_s)

第2步:按列名横向排序

结合 axis=1 可让表头按照字母或字符编码顺序重新分布:

df_s = df.sort_index(axis=1)
print(df_s)

df.sort_index(axis=1, ascending=False, inplace=True)
print(df)

常见问题排错与总结

在实际运行中,若遇到 Type Error 或 Cannot compare strings to numbers 提示,通常是因为混排了异构数据类型。此时应先使用 select_dtypes(include=['number']) 提取纯数值子集,或完成数据类型转换后再执行排序。此外,大规模数据集排序可能消耗较多内存,适当控制 inplace=False 结合链式调用可优化资源管理。

以上就是 Pandas DataFrame 与 Series 排序方法的详细内容,更多关于 Python 数据处理技巧与数据清洗规范的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表