数据科学必备Pandas DataFrame:数据排序详解

学习 pandas 排序方法是开始或练习使用 Python 进行基本数据分析的好方法。 最常见的是,数据分析是使用 Excel、SQL 或 pandas 完成的。 使用 pandas 的一大优点是可以处理大量数据并提供高性能的数据操作能力。

本文介绍如何使用 .sort_values().sort_index(),能够在 DataFrame 中有效地对数据进行排序。

在这里插入图片描述

Pandas 排序方法入门

DataFrame 是一种带有标记的行和列的数据结构。可以按行或列值以及行或列索引对 DataFrame 进行排序。

行和列都有索引,它们是数据在 DataFrame 中位置的数字表示。可以使用 DataFrame 的索引位置从特定行或列中检索数据。默认情况下,索引号从零开始。您也可以手动分配自己的索引。

数据准备

美国环境保护署 (EPA) 针对 1984 年至 2021 年间制造的车辆编制的燃油经济性数据。
在这里插入图片描述
EPA燃油经济性数据集

出于分析目的,将按品牌、型号、年份和其他车辆属性查看车辆的 MPG(英里/加仑)数据要读入 DataFrame 的列。

import pandas as pd

column_subset = [
    "id",
    "make",
    "model",
    "year",
    "cylinders",
    "fuelType",
    "trany",
    "mpgData",
    "city08",
    "highway08"
]

df = pd.read_csv(
    "数据科学必备Pandas DataFrame:数据排序详解/vehicles.csv",
    usecols=column_subset,
    nrows=100
)

df.head()

在这里插入图片描述

.sort_values()

可以使用 .sort_values() 沿任一轴(列或行)对 D​​ataFrame 中的值进行排序,类似 Excel 中的值排序。
在这里插入图片描述

.sort_index()

可以使用 .sort_index() 通过行索引或列标签对 DataFrame 进行排序,是根据行索引或列名对 DataFrame 进行排序
在这里插入图片描述

DataFrame 单列数据排序

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

按升序按列排序

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

df.sort_values("city08")

在这里插入图片描述

排序顺序调整

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

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

在这里插入图片描述

选择排序算法

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

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

在这里插入图片描述

DataFrame 多列数据排序

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

升序按列排序

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

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

          make               model
0   Alfa Romeo  Spider Veloce 2000
18        Audi                 100
19        Audi                 100
20         BMW                740i
21         BMW               740il
..         ...                 ...
12  Volkswagen      Golf III / GTI
13  Volkswagen           Jetta III
15  Volkswagen           Jetta III
16       Volvo                 240
17       Volvo                 240
[100 rows x 2 columns]

更改列排序顺序

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

df.sort_values(by=["model", "make"])[["make", "model"]]
             make        model
18           Audi          100
19           Audi          100
16          Volvo          240
17          Volvo          240
75          Mazda          626
..            ...          ...
62           Ford  Thunderbird
63           Ford  Thunderbird
88     Oldsmobile     Toronado
42  CX Automotive        XM v6
43  CX Automotive       XM v6a
[100 rows x 2 columns]

降序按多列排序

df.sort_values(by=["make", "model"],ascending=False)[["make", "model"]]
          make               model
16       Volvo                 240
17       Volvo                 240
13  Volkswagen           Jetta III
15  Volkswagen           Jetta III
11  Volkswagen      Golf III / GTI
..         ...                 ...
21         BMW               740il
20         BMW                740i
18        Audi                 100
19        Audi                 100
0   Alfa Romeo  Spider Veloce 2000
[100 rows x 2 columns]

不同排序顺序的多列排序

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

df.sort_values(
    by=["make", "model", "city08"],
    ascending=[True, True, False]
)[["make", "model", "city08"]]

          make               model  city08
0   Alfa Romeo  Spider Veloce 2000      19
18        Audi                 100      17
19        Audi                 100      17
20         BMW                740i      14
21         BMW               740il      14
..         ...                 ...     ...
11  Volkswagen      Golf III / GTI      18
15  Volkswagen           Jetta III      20
13  Volkswagen           Jetta III      18
17       Volvo                 240      19
16       Volvo                 240      18
[100 rows x 3 columns]

DataFrame 索引排序

DataFrame 有一个.index属性,默认情况下是其行位置的数字表示。可以将索引视为行号,有助于快速查找和识别行。

索引升序排序

可以使用 .sort_index() 根据行索引对 DataFrame 进行排序。 像在前面的示例中那样按列值排序会重新排序 DataFrame 中的行,因此索引变得杂乱无章。 当过滤 DataFrame 或删除或添加行时,也会发生这种情况。

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

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

在这里插入图片描述
使用 .sort_index() 恢复 DataFrame 原始顺序。

sorted_df.sort_index()

在这里插入图片描述
使用 bool 进行判断。

sorted_df.sort_index() == df

在这里插入图片描述
可以自定义索引分配了 .set_index() 设置列表进行参数传递。

assigned_index_df = df.set_index(["make", "model"])
assigned_index_df 

在这里插入图片描述
使用 .sort_index() 进行排序。

assigned_index_df.sort_index()

在这里插入图片描述

索引降序排序

assigned_index_df.sort_index(ascending=False)

在这里插入图片描述

DataFrame 列排序

使用 DataFrame 的列标签对行值进行排序。 使用 .sort_index() 并将可选参数轴设置为 1 将按列标签对 DataFrame 进行排序。 排序算法应用于轴标签而不是实际数据。 这有助于对 DataFrame 进行视觉检查。

当您使用 .sort_index() 而不传递任何显式参数时,使用 axis=0 作为默认参数。 DataFrame 的轴是指索引(axis=0)或列(axis=1)。 可以使用这两个轴来索引和选择 DataFrame 中的数据以及对数据进行排序。

列标签排序

df.sort_index(axis=1)

在这里插入图片描述

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

在这里插入图片描述

排序时处理丢失的数据

现实的数据通常有很多不完善之处。虽然 pandas 有多种方法可用于在排序之前清理数据,但有时在排序时查看哪些数据丢失是件好事。可以使用 na_position 参数执行此操作。

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

在这里插入图片描述

na_position 的 .sort_values()

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

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

    city08  cylinders fuelType  ...            trany  year mpgData_
1        9         12  Regular  ...     Manual 5-spd  1985      NaN
3       10          8  Regular  ...  Automatic 3-spd  1985      NaN
4       17          4  Premium  ...     Manual 5-spd  1993      NaN
5       21          4  Regular  ...  Automatic 3-spd  1993      NaN
11      18          4  Regular  ...  Automatic 4-spd  1993      NaN
..     ...        ...      ...  ...              ...   ...      ...
32      15          8  Premium  ...  Automatic 4-spd  1993     True
33      15          8  Premium  ...  Automatic 4-spd  1993     True
37      17          6  Regular  ...  Automatic 3-spd  1993     True
85      17          6  Regular  ...  Automatic 4-spd  1993     True
95      17          6  Regular  ...  Automatic 3-spd  1993     True
[100 rows x 11 columns]

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

DataFrame 排序修改

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

df.sort_values("city08", inplace=True)
df.sort_index(inplace=True)

账面的代码每次执行结果结果的 df 都会替代原始的 df 。

猜你喜欢

转载自blog.csdn.net/qq_20288327/article/details/124223029