【愚公系列】《Python网络爬虫从入门到精通》033-DataFrame的数据排序

举报
愚公搬代码 发表于 2025/05/04 13:21:30 2025/05/04
【摘要】 标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳...
标题 详情
作者简介 愚公搬代码
头衔 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
博客内容 .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎 👍点赞、✍评论、⭐收藏

🚀前言

在数据分析的过程中,数据的排序是一个不可或缺的环节。无论是在探索性数据分析中了解数据分布,还是在准备数据可视化时展示清晰的趋势,掌握如何对DataFrame中的数据进行有效排序都是至关重要的。Pandas库为我们提供了强大的排序功能,使得这一过程简单而高效。

本文将深入探讨DataFrame的数据排序,包括按单列或多列排序的技巧、升序和降序的设置、以及如何处理缺失值对排序结果的影响。我们将通过具体示例,帮助你快速掌握这些操作,提升数据处理的灵活性和效率。

🚀一、DataFrame的数据排序

🔎1.数据排序整理

🦋1.1 sort_values 方法概述

DataFrame.sort_values() 是 Pandas 中用于数据排序的核心方法,功能类似 SQL 的 ORDER BY。支持按行/列排序,语法如下:

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False)

🦋1.2 参数详解

参数 说明
by 排序依据的列名或列名列表
axis 排序轴:0 按行排序(默认),1 按列排序
ascending 排序顺序:True 升序(默认),False 降序;多列可用布尔列表指定
inplace 是否原地修改:False 返回新对象(默认),True 直接修改原对象
kind 排序算法:quicksort(默认)、mergesortheapsort
na_position 缺失值位置:last 末尾(默认),first 开头
ignore_index 是否重置索引:False 保留原索引(默认),True 生成新索引(0~n-1)

🦋1.3 排序场景与实例

☀️1.3.1 单列排序

场景:按指定列(如“销量”)降序排序
代码:

import pandas as pd
excelFile = 'mrbook.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
#设置数据显示的列数和宽度
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
print('-------------------------按照一列数据排序-------------------------')
#按“销量”列降序排序
df=df.sort_values(by='销量',ascending=False)
print(df)
在这里插入图片描述在这里插入图片描述

☀️1.3.2 多列排序

场景:按多列优先级排序(如先“图书名称”降序,再“销量”降序)
代码:

import pandas as pd
excelFile = 'mrbook.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
#设置数据显示的列数和宽度
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)

print('-------------------------按照多列数据排序-------------------------')
#按“图书名称”和“销量”列降序排序
df=df.sort_values(by=['图书名称','销量'])
print(df)
在这里插入图片描述在这里插入图片描述

☀️1.3.3 统计结果排序

场景:分组统计后排序(如按“类别”分组求和,再按“销量”降序)
代码:

import pandas as pd
excelFile = 'mrbook.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
#设置数据显示的列数和宽度
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)

print('-------------------------对分组统计结果排序-------------------------')
df1=df.groupby(["类别"])["销量"].sum().reset_index()
df2=df1.sort_values(by='销量',ascending=False)
print(df2)
在这里插入图片描述在这里插入图片描述

☀️1.3.4 按行排序

场景:按指定行的值排序(如按第一行升序排列列)
代码:

import pandas as pd
excelFile = 'books.xls'
dfrow = pd.DataFrame(pd.read_excel(excelFile))
#设置数据显示的列数和宽度
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)


print('-------------------------按行数据排序-------------------------')
#按照索引值为0的行,即第一行的值升序排序
print(dfrow.sort_values(by=0,ascending=True,axis=1))
在这里插入图片描述在这里插入图片描述

🦋1.4 注意事项

  1. 数据类型一致性:按行排序时,行内数据类型需一致,否则会报错。
  2. 索引处理:使用 ignore_index=True 可生成连续数字索引。
  3. 缺失值处理:通过 na_position 控制缺失值位置,避免干扰排序结果。
  4. 性能优化:大数据量时可选 kind='mergesort' 保证稳定性。

🔎2.数据排名整理

🦋2.1 rank 方法概述

DataFrame.rank() 用于为数据分配排名(如数值大小的顺序位置),支持多种排名规则(如并列值处理)。语法如下:

DataFrame.rank(
    axis=0, 
    method='average', 
    numeric_only=None, 
    na_option='keep', 
    ascending=True, 
    pct=False
)

🦋2.2 参数详解

参数 说明
axis 排名方向:0 按行排名(默认),1 按列排名
method 相同值的排名规则(average/min/max/first/dense,默认 average
numeric_only 仅对数值列排名:None(默认,自动识别),True 强制只处理数值列
na_option 缺失值处理:keep(保留为 NaN,默认),top(最小排名),bottom(最大排名)
ascending 排序方向:True 升序(默认),False 降序
pct 返回百分比排名:False(默认不启用),True 以百分比形式显示排名

🦋2.3 排名规则与实例

☀️2.3.1 顺序排名 (method='first')

规则:相同值按其在数据中的出现顺序分配唯一排名,无并列。
代码:

import pandas as pd
excelFile = 'mrbook.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
#设置数据显示的列数和宽度
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
#按“销量”列降序排序
df=df.sort_values(by='销量',ascending=False)
# 顺序排名
df['顺序排名'] = df['销量'].rank(method="first", ascending=False)
print(df[['图书名称', '销量', '顺序排名']])
在这里插入图片描述在这里插入图片描述

☀️2.3.2 平均排名 (method='average')

规则:相同值分配平均排名(默认方式)。
代码:

import pandas as pd
excelFile = 'mrbook.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
#设置数据显示的列数和宽度
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
#按“销量”列降序排序
df=df.sort_values(by='销量',ascending=False)

#平均排名
df['平均排名']=df['销量'].rank(ascending=False)
print(df[['图书名称','销量','平均排名']])
在这里插入图片描述在这里插入图片描述

☀️2.3.3 最小值排名 (method='min')

规则:相同值分配最低可能排名(跳跃式名次)。
代码:

import pandas as pd
excelFile = 'mrbook.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
#设置数据显示的列数和宽度
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
#按“销量”列降序排序
df=df.sort_values(by='销量',ascending=False)

#平均排名
df['最小值排名']=df['销量'].rank(method="min",ascending=False)
print(df[['图书名称','销量','最小值排名']])
在这里插入图片描述在这里插入图片描述

☀️2.3.4 最大值排名 (method='max')

规则:相同值分配最高可能排名(跳跃式名次)。
代码:

import pandas as pd
excelFile = 'mrbook.xlsx'
df = pd.DataFrame(pd.read_excel(excelFile))
#设置数据显示的列数和宽度
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
#按“销量”列降序排序
df=df.sort_values(by='销量',ascending=False)

df['最大值排名']=df['销量'].rank(method="max",ascending=False)
#最大值排名
print(df[['图书名称','销量','最大值排名']])
在这里插入图片描述在这里插入图片描述

☀️2.3.5 密集排名 (method='dense')

规则:相同值共享同一排名,后续排名不跳跃(如 1,2,2,3)。
代码:

# 密集排名(无跳跃)
df['密集排名'] = df['销量'].rank(method='dense', ascending=False)
print(df[['图书名称', '销量', '密集排名']])
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。