如果想学习 Python 数据分析,其中必掌握的一个数据处理技巧就是排序。可以极大的加速处理数据的效率。pandas 使用的数据排序的方法有 .sort_values().sort_index()

整套学习自学教程中应用的数据都是《三國志》、《真·三國無雙》系列游戏中的内容。

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(1)

Pandas 排序方法入门

DataFrame 是一种带有标记的行和列的数据结构,能按行或列值以及行或列索引对数据进行排序。 DataFrame 中行和列索引是用数字表示,可以使用索引位置从特定行或列中检索数据。

默认情况下索引号从零开始,也可以手动分配自己的索引。

数据准备

import pandas as pd df = pd.read_Excel("Romance of the Three Kingdoms 13/人物详情数据.xlsx") df.head()

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(2)

.sort_values()

类似 Excel 中的值排序,在 DataFrame 中使用 .sort_values() 沿任一轴(列或行)对值进行排序。

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(3)

.sort_index()

使用 .sort_index() 通过行索引或列标签对 DataFrame 进行排序。

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(4)

DataFrame 单列数据排序

.sort_values() 默认情况返回一个按升序排序的新 DataFrame ,并且不会修改原始 DataFrame。

按升序按列排序

使用 .sort_values() 排序要将单个参数传递给包含要排序的列的名称的方法。

df.sort_values("生年")

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(5)

排序顺序调整

默认情况下 .sort_values() ascending 设置为 True(升序排列)。如果按降序排序则设置为 False 。

df.sort_values("生年",ascending=False)

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(6)

选择排序算法

可用的算法有 快速排序(quicksort) 、归并排序(mergesort) 、堆排序(heapsort)

df.sort_values(by="city08",ascending=False,kind="mergesort")

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(7)

DataFrame 多列数据排序

按两个键排序,可以将列名列表by传递。

升序按列排序

要在多列上对 DataFrame 进行排序,必须提供列名列表。

df.sort_values(by=["生年", "寿命"])[["生年", "寿命"]] 生年 寿命 779 130 66 471 132 63 592 132 63 183 132 64 435 132 75 ... ... ... 369 243 18 279 246 18 318 246 57 727 247 60 227 248 36 857 rows × 2 columns

更改列排序顺序

调整排序 by 列表的的顺序。

df.sort_values(by=["寿命","生年"])[["寿命","生年"]] 寿命 生年 335 13 196 605 14 195 794 16 177 679 17 182 369 18 243 ... ... ... 822 107 162 843 107 162 844 107 162 845 107 162 851 107 162 857 rows × 2 columns

降序按多列排序

df.sort_values(by=["寿命","生年"],ascending=False)[["寿命","生年"]] 寿命 生年 811 107 162 822 107 162 843 107 162 844 107 162 845 107 162 ... ... ... 369 18 243 679 17 182 794 16 177 605 14 195 335 13 196 857 rows × 2 columns

不同排序顺序的多列排序

使用多个列进行排序并让这些列使用不同的 ascending 参数。pandas 可以通过单个方法调用来完成此操作。如果要按升序对某些列进行排序,而按降序对某些列进行排序,则可以将布尔值列表传递给 ascending 即可。

df.sort_values( by=["寿命","生年","登場"], ascending=[True, True, False] )[["寿命","生年","登場"]] 寿命 生年 登場 335 13 196 207 605 14 195 207 794 16 177 190 679 17 182 196 369 18 243 253 ... ... ... ... 811 107 162 176 822 107 162 176 843 107 162 176 844 107 162 176 845 107 162 176 857 rows × 3 columns

DataFrame 索引排序

DataFrame 有一个.index 属性,默认表示行位置的数字。索引可以视为行号,有助于快速查找和识别行(功能同 MySQL)。

索引升序排序

使用 .sort_index() 根据行索引对 DataFrame 进行排序。

使用 .sort_values() 创建一个新的排序 DataFrame 进行后续的操作。

sorted_df = df.sort_values(by=["make", "model"]) sorted_df

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(8)

使用 .sort_index() 恢复 DataFrame 原始顺序。

sorted_df.sort_index()

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(9)

使用 bool 进行判断。

sorted_df.sort_index() == df

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(10)

可以自定义索引分配了 .set_index() 设置列表进行参数传递。

assigned_index_df = df.set_index(["寿命","生年"]) assigned_index_df

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(11)

使用 .sort_index() 进行排序。

assigned_index_df.sort_index()

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(12)

索引降序排序

assigned_index_df.sort_index(ascending=False)

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(13)

DataFrame 列排序

使用 DataFrame 的列标签对行值进行排序。 使用 .sort_index() 并将可选参数轴设置为 1 将按列标签对 DataFrame 进行排序。

DataFrame 的轴是指索引(axis=0)或列(axis=1)。 可以使用这两个轴来索引和选择 DataFrame 中的数据以及对数据进行排序。

列标签排序

df.sort_index(axis=1)

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(14)

df.sort_index(axis=1, ascending=False)

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(15)

排序时处理丢失的数据

使用 na_position 参数执行此缺失数据列的排序操作。

df["mpgData_"] = df["mpgData"].map({"Y": True})

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(16)

na_position 的 .sort_values()

.sort_values() 接受一个名为 na_position 的参数,该参数有助于处理要排序的列中的缺失数据。

df.sort_values(by="mpgData_",na_position="first")

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(17)

用于排序的列中的任何缺失数据都将显示在 DataFrame 的前面。用于查看列的缺失值情况。

DataFrame 排序修改

.sort_values() 中增加重要的参数 inplace=True。作用在于直接对原始的 DataFrame 进行修改。

df.sort_values("寿命",inplace=True) df.reset_index(drop=True,inplace=True) df

pandas筛选数据后的索引(数据科学必备Pandas数据排序方法汇总)(18)

,