上一篇
Pandas排序的两种形式:sort_index与sort_values详解 | Python数据分析教程
- Python
- 2025-07-30
- 1529
Pandas排序的两种形式详解
掌握sort_index和sort_values方法,轻松处理数据分析任务
Pandas排序的重要性
在数据分析过程中,数据排序是基础且关键的操作。Pandas提供了两种强大的排序方法:sort_index()(按索引排序)和sort_values()(按值排序)。掌握这两种方法能让你更高效地探索和理解数据集。
1. sort_index() - 按索引排序
sort_index()方法允许你根据行索引或列索引对DataFrame或Series进行排序。
主要参数说明:
- axis:0/'index'(按行索引排序)或1/'columns'(按列索引排序)
- ascending:True(升序,默认)或False(降序)
- inplace:True(原地修改)或False(返回新对象,默认)
- na_position:'last'(NaN值放在最后,默认)或'first'(NaN值放在最前)
示例1:按行索引排序
import pandas as pd
# 创建示例DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 32, 18, 47],
'Salary': [60000, 45000, 52000, 80000]}
df = pd.DataFrame(data)
df.index = [3, 1, 4, 2] # 设置自定义索引
print("原始DataFrame:")
print(df)
# 按行索引升序排序
df_sorted = df.sort_index()
print("\n按行索引升序排序:")
print(df_sorted)
# 按行索引降序排序
df_sorted_desc = df.sort_index(ascending=False)
print("\n按行索引降序排序:")
print(df_sorted_desc)
# 创建示例DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 32, 18, 47],
'Salary': [60000, 45000, 52000, 80000]}
df = pd.DataFrame(data)
df.index = [3, 1, 4, 2] # 设置自定义索引
print("原始DataFrame:")
print(df)
# 按行索引升序排序
df_sorted = df.sort_index()
print("\n按行索引升序排序:")
print(df_sorted)
# 按行索引降序排序
df_sorted_desc = df.sort_index(ascending=False)
print("\n按行索引降序排序:")
print(df_sorted_desc)
示例2:按列索引排序
# 创建示例DataFrame(列名乱序)
data = {'Salary': [60000, 45000, 52000, 80000],
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 32, 18, 47]}
df_columns = pd.DataFrame(data)
print("原始DataFrame:")
print(df_columns)
# 按列索引升序排序
df_col_sorted = df_columns.sort_index(axis=1)
print("\n按列索引升序排序:")
print(df_col_sorted)
# 按列索引降序排序
df_col_sorted_desc = df_columns.sort_index(axis=1, ascending=False)
print("\n按列索引降序排序:")
print(df_col_sorted_desc)
data = {'Salary': [60000, 45000, 52000, 80000],
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 32, 18, 47]}
df_columns = pd.DataFrame(data)
print("原始DataFrame:")
print(df_columns)
# 按列索引升序排序
df_col_sorted = df_columns.sort_index(axis=1)
print("\n按列索引升序排序:")
print(df_col_sorted)
# 按列索引降序排序
df_col_sorted_desc = df_columns.sort_index(axis=1, ascending=False)
print("\n按列索引降序排序:")
print(df_col_sorted_desc)
使用技巧: 当处理时间序列数据时,sort_index()特别有用,可以确保时间索引按正确顺序排列。
2. sort_values() - 按值排序
sort_values()方法允许你根据一列或多列的值对DataFrame进行排序。
主要参数说明:
- by:指定排序依据的列名或列名列表(必填)
- axis:0/'index'(按行值排序)或1/'columns'(按列值排序)
- ascending:True(升序,默认)或False(降序);多列时可指定布尔值列表
- inplace:True(原地修改)或False(返回新对象,默认)
- na_position:'last'(NaN值放在最后,默认)或'first'(NaN值放在最前)
示例1:单列排序
# 使用之前的DataFrame
print("原始DataFrame:")
print(df)
# 按Age列升序排序
df_sorted_age = df.sort_values(by='Age')
print("\n按Age升序排序:")
print(df_sorted_age)
# 按Salary列降序排序
df_sorted_salary = df.sort_values(by='Salary', ascending=False)
print("\n按Salary降序排序:")
print(df_sorted_salary)
print("原始DataFrame:")
print(df)
# 按Age列升序排序
df_sorted_age = df.sort_values(by='Age')
print("\n按Age升序排序:")
print(df_sorted_age)
# 按Salary列降序排序
df_sorted_salary = df.sort_values(by='Salary', ascending=False)
print("\n按Salary降序排序:")
print(df_sorted_salary)
示例2:多列排序
# 添加部门信息
df['Department'] = ['HR', 'Engineering', 'Engineering', 'Marketing']
print("原始DataFrame:")
print(df)
# 按Department升序,然后按Salary降序排序
df_sorted_multi = df.sort_values(by=['Department', 'Salary'],
ascending=[True, False])
print("\n按Department升序,Salary降序排序:")
print(df_sorted_multi)
# 处理包含NaN值的情况
df_with_nan = df.copy()
df_with_nan.loc[2, 'Salary'] = None # 添加一个NaN值
print("\n包含NaN值的DataFrame:")
print(df_with_nan)
# 将NaN值放在最前
df_sorted_nan = df_with_nan.sort_values(by='Salary', na_position='first')
print("\n按Salary排序(NaN值在最前):")
print(df_sorted_nan)
df['Department'] = ['HR', 'Engineering', 'Engineering', 'Marketing']
print("原始DataFrame:")
print(df)
# 按Department升序,然后按Salary降序排序
df_sorted_multi = df.sort_values(by=['Department', 'Salary'],
ascending=[True, False])
print("\n按Department升序,Salary降序排序:")
print(df_sorted_multi)
# 处理包含NaN值的情况
df_with_nan = df.copy()
df_with_nan.loc[2, 'Salary'] = None # 添加一个NaN值
print("\n包含NaN值的DataFrame:")
print(df_with_nan)
# 将NaN值放在最前
df_sorted_nan = df_with_nan.sort_values(by='Salary', na_position='first')
print("\n按Salary排序(NaN值在最前):")
print(df_sorted_nan)
使用技巧: 多列排序时,ascending参数可以接受布尔值列表,为每列指定不同的排序方向。
sort_index()与sort_values()对比
特性 | sort_index() | sort_values() |
---|---|---|
主要用途 | 按索引(行或列)排序 | 按数据值(一列或多列)排序 |
排序依据 | 索引标签 | 列/行中的实际值 |
关键参数 | axis, ascending | by, axis, ascending |
多列排序 | 不支持 | 支持(通过by参数传入列表) |
典型应用场景 | 整理时间序列数据、恢复原始顺序 | 数据分析、按数值排序查找极值 |
总结与最佳实践
理解sort_index()和sort_values()的区别是高效使用Pandas的关键:
- 当需要按索引标签排序时(如时间序列数据),使用sort_index()
- 当需要按实际数值排序时(如按薪资从高到低排列员工),使用sort_values()
- 多列排序时,sort_values()更灵活,可以为不同列指定不同排序方向
- 对于大型数据集,排序前考虑使用
reset_index()
方法可能会提高效率 - 处理NaN值时,使用
na_position
参数控制其位置
在实际工作中,两种排序方法往往结合使用,先按索引排序整理数据,再按值排序进行分析。
本文由ZhongYing于2025-07-30发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://www.521pj.cn/20256872.html
发表评论