前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Pandas Sort:你的 Python 数据排序指南

Pandas Sort:你的 Python 数据排序指南

作者头像
玖柒的小窝
修改于 2021-09-22 03:01:50
修改于 2021-09-22 03:01:50
14.6K00
代码可运行
举报
文章被收录于专栏:各类技术文章~各类技术文章~
运行总次数:0
代码可运行

目录

  • Pandas 排序方法入门
    • 准备数据集
    • 熟悉 .sort_values()
    • 熟悉 .sort_index()
  • 在单列上对 DataFrame 进行排序
    • 按升序按列排序
    • 更改排序顺序
    • 选择排序算法
  • 在多列上对 DataFrame 进行排序
    • 按升序按多列排序
    • 更改列排序顺序
    • 按降序按多列排序
    • 按具有不同排序顺序的多列排序
  • 根据索引对 DataFrame 进行排序
    • 按升序按索引排序
    • 按索引降序排序
    • 探索高级索引排序概念
  • 对 DataFrame 的列进行排序
    • 使用 DataFrame 轴
    • 使用列标签进行排序
  • 在 Pandas 中排序时处理丢失的数据
    • 了解 .sort_values() 中的 na_position 参数
    • 了解 .sort_index() 中的 na_position 参数
  • 使用排序方法修改你的 DataFrame
    • 就地使用 .sort_values()
    • 就地使用 .sort_index()
  • 结论

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

在本教程中,您将学习如何使用.sort_values().sort_index(),这将使您能够有效地对 DataFrame 中的数据进行排序。

在本教程结束时,您将知道如何:

  • 按一列或多列的值对Pandas DataFrame进行排序
  • 使用ascending参数更改排序顺序
  • 通过index使用对 DataFrame 进行排序.sort_index()
  • 在对值进行排序时组织缺失的数据
  • 使用set to 对DataFrame进行就地排序inplaceTrue

要学习本教程,您需要对Pandas DataFrames有基本的了解,并对从文件中读取数据有一定的了解。

Pandas 排序方法入门

快速提醒一下,DataFrame是一种数据结构,行和列都带有标记的轴。您可以按行或列值以及行或列索引对 DataFrame 进行排序。

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

准备数据集

在本教程中,您将使用美国环境保护署 (EPA) 为 1984 年至 2021 年间制造的车辆编制的燃油经济性数据。EPA 燃油经济性数据集非常棒,因为它包含许多不同类型的信息,您可以对其进行排序上,从文本到数字数据类型。该数据集总共包含八十三列。

要继续,您需要安装pandas Python 库。本教程中的代码是使用 pandas 1.2.0 和Python 3.9.1 执行的

注意:整个燃油经济性数据集约为 18 MB。将整个数据集读入内存可能需要一两分钟。限制行数和列数有助于提高性能,但下载数据仍需要几秒钟的时间。

出于分析目的,您将按品牌、型号、年份和其他车辆属性查看车辆的 MPG(每加仑英里数)数据。您可以指定要读入 DataFrame 的列。对于本教程,您只需要可用列的子集。

以下是将燃油经济性数据集的相关列读入 DataFrame 并显示前五行的命令:

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import pandas as pd

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

>>> df = pd.read_csv(
...     "https://www.fueleconomy.gov/feg/epadata/vehicles.csv",
...     usecols=column_subset,
...     nrows=100
... )

>>> df.head()
   city08  cylinders fuelType  ...  mpgData            trany  year
0      19          4  Regular  ...        Y     Manual 5-spd  1985
1       9         12  Regular  ...        N     Manual 5-spd  1985
2      23          4  Regular  ...        Y     Manual 5-spd  1985
3      10          8  Regular  ...        N  Automatic 3-spd  1985
4      17          4  Premium  ...        N     Manual 5-spd  1993
[5 rows x 10 columns]

通过.read_csv()使用数据集 URL 进行调用,您可以将数据加载到 DataFrame 中。缩小列会导致更快的加载时间和更少的内存使用。为了进一步限制内存消耗并快速了解数据,您可以使用 指定要加载的行数nrows

熟悉 .sort_values()

您用于.sort_values()沿任一轴(列或行)对 D​​ataFrame 中的值进行排序。通常,您希望通过一列或多列的值对 DataFrame 中的行进行排序:

上图显示了使用.sort_values()根据highway08列中的值对 DataFrame 的行进行排序的结果。这类似于使用列对电子表格中的数据进行排序的方式。

熟悉 .sort_index()

您用于.sort_index()按行索引或列标签对 DataFrame 进行排序。与 using 的不同之处.sort_values()在于您是根据其行索引或列名称对 DataFrame 进行排序,而不是根据这些行或列中的值:

DataFrame 的行索引在上图中以蓝色标出。索引不被视为一列,您通常只有一个行索引。行索引可以被认为是从零开始的行号。

在单列上对 DataFrame 进行排序

要根据单列中的值对 DataFrame 进行排序,您将使用.sort_values(). 默认情况下,这将返回一个按升序排序的新 DataFrame。它不会修改原始 DataFrame。

按升序按列排序

要使用.sort_values(),请将单个参数传递给包含要作为排序依据的列的名称的方法。在此示例中,您按city08列对 DataFrame 进行排序,该列表示纯燃料汽车的城市 MPG:

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df.sort_values("city08")
    city08  cylinders fuelType  ...  mpgData            trany  year
99       9          8  Premium  ...        N  Automatic 4-spd  1993
1        9         12  Regular  ...        N     Manual 5-spd  1985
80       9          8  Regular  ...        N  Automatic 3-spd  1985
47       9          8  Regular  ...        N  Automatic 3-spd  1985
3       10          8  Regular  ...        N  Automatic 3-spd  1985
..     ...        ...      ...  ...      ...              ...   ...
9       23          4  Regular  ...        Y  Automatic 4-spd  1993
8       23          4  Regular  ...        Y     Manual 5-spd  1993
7       23          4  Regular  ...        Y  Automatic 3-spd  1993
76      23          4  Regular  ...        Y     Manual 5-spd  1993
2       23          4  Regular  ...        Y     Manual 5-spd  1985
[100 rows x 10 columns]

这将使用 中的列值对您的 DataFrame 进行排序city08,首先显示 MPG 最低的车辆。默认情况下,按升序.sort_values()对数据进行排序。尽管您没有为传递给 的参数指定名称,但.sort_values()您实际上使用了by参数,您将在下一个示例中看到该参数。

更改排序顺序

的另一个参数.sort_values()ascending。默认情况下.sort_values()已经ascending设置True。如果您希望 DataFrame 按降序排序,则可以传递False给此参数:

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df.sort_values(
...     by="city08",
...     ascending=False
... )
    city08  cylinders fuelType  ...  mpgData            trany  year
9       23          4  Regular  ...        Y  Automatic 4-spd  1993
2       23          4  Regular  ...        Y     Manual 5-spd  1985
7       23          4  Regular  ...        Y  Automatic 3-spd  1993
8       23          4  Regular  ...        Y     Manual 5-spd  1993
76      23          4  Regular  ...        Y     Manual 5-spd  1993
..     ...        ...      ...  ...      ...              ...   ...
58      10          8  Regular  ...        N  Automatic 3-spd  1985
80       9          8  Regular  ...        N  Automatic 3-spd  1985
1        9         12  Regular  ...        N     Manual 5-spd  1985
47       9          8  Regular  ...        N  Automatic 3-spd  1985
99       9          8  Premium  ...        N  Automatic 4-spd  1993
[100 rows x 10 columns]

通过传递Falseascending,您可以颠倒排序顺序。现在,您的 DataFrame 按城市条件下测量的平均 MPG 降序排序。MPG 值最高的车辆在第一排。

选择排序算法

值得注意的是,pandas 允许您选择不同的排序算法来与.sort_values()和一起使用.sort_index()。可用的算法quicksortmergesortheapsort。有关这些不同排序算法的更多信息,请查看Python 中的排序算法

对单列进行排序时默认使用的算法是quicksort。要将其更改为稳定的排序算法,请使用mergesort。您可以使用or 中的kind参数来执行此操作,如下所示:.sort_values().sort_index()

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df.sort_values(
...     by="city08",
...     ascending=False,
...     kind="mergesort"
... )
    city08  cylinders fuelType  ...  mpgData            trany  year
2       23          4  Regular  ...        Y     Manual 5-spd  1985
7       23          4  Regular  ...        Y  Automatic 3-spd  1993
8       23          4  Regular  ...        Y     Manual 5-spd  1993
9       23          4  Regular  ...        Y  Automatic 4-spd  1993
10      23          4  Regular  ...        Y     Manual 5-spd  1993
..     ...        ...      ...  ...      ...              ...   ...
69      10          8  Regular  ...        N  Automatic 3-spd  1985
1        9         12  Regular  ...        N     Manual 5-spd  1985
47       9          8  Regular  ...        N  Automatic 3-spd  1985
80       9          8  Regular  ...        N  Automatic 3-spd  1985
99       9          8  Premium  ...        N  Automatic 4-spd  1993
[100 rows x 10 columns]

使用kind,您将排序算法设置为mergesort。之前的输出使用了默认quicksort算法。查看突出显示的索引,您可以看到行的顺序不同。这是因为quicksort不是稳定的排序算法,而是mergesort

注意:在 Pandas 中,kind当您对多个列或标签进行排序时会被忽略。

当您对具有相同键的多条记录进行排序时,稳定的排序算法将在排序后保持这些记录的原始顺序。因此,如果您计划执行多种排序,则必须使用稳定的排序算法。

在多列上对 DataFrame 进行排序

在数据分析中,通常希望根据多列的值对数据进行排序。想象一下,您有一个包含人们名字和姓氏的数据集。先按姓然后按名字排序是有意义的,这样姓氏相同的人会根据他们的名字按字母顺序排列。

在第一个示例中,您在名为 的单个列上对 DataFrame 进行了排序city08。从分析的角度来看,城市条件下的 MPG 是决定汽车受欢迎程度的重要因素。除了城市条件下的 MPG,您可能还想查看高速公路条件下的 MPG。要按两个键排序,您可以将列名列表传递给by

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df.sort_values(
...     by=["city08", "highway08"]
... )[["city08", "highway08"]]
    city08  highway08
80       9         10
47       9         11
99       9         13
1        9         14
58      10         11
..     ...        ...
9       23         30
10      23         30
8       23         31
76      23         31
2       23         33
[100 rows x 2 columns]

通过指定列名称city08和的列表highway08,您可以使用 对两列上的 DataFrame 进行排序.sort_values()。下一个示例将解释如何指定排序顺序以及为什么注意您使用的列名列表很重要。

按升序按多列排序

要在多个列上对 DataFrame 进行排序,您必须提供一个列名称列表。例如,要按make和排序model,您应该创建以下列表,然后将其传递给.sort_values()

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 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]

现在您的 DataFrame 按升序排序make。如果有两个或更多相同的品牌,则按 排序model。在列表中指定列名的顺序对应于 DataFrame 的排序方式。

更改列排序顺序

由于您使用多列进行排序,因此您可以指定列的排序顺序。如果要更改上一个示例中的逻辑排序顺序,则可以更改传递给by参数的列表中列名的顺序:

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 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]

您的 DataFrame 现在按model升序按列排序,然后按make是否有两个或更多相同模型进行排序。您可以看到更改列的顺序也会更改值的排序顺序。

按降序按多列排序

到目前为止,您仅对多列按升序排序。在下一个示例中,您将根据makemodel列按降序排序。要按降序排序,请设置ascendingFalse

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 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]

make列中的值按字母顺序model倒序排列,对于具有相同make. 对于文本数据,排序区分大小写,这意味着大写文本将首先按升序出现,最后按降序出现。

按具有不同排序顺序的多列排序

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

在这个例子中,您排列数据帧由makemodelcity08列,与前两列按照升序排序和city08按降序排列。为此,您将列名列表传递给by和布尔值列表传递给ascending

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 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]

现在你的数据帧进行排序make,并model在按升序排列,但与city08按降序排列列。这很有用,因为它按分类顺序对汽车进行分组,并首先显示最高 MPG 的汽车。

根据索引对 DataFrame 进行排序

在对索引进行排序之前,最好先了解索引代表什么。DataFrame 有一个.index属性,默认情况下它是其行位置的数字表示。您可以将索引视为行号。它有助于快速行查找和识别。

按升序按索引排序

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

为了说明 的使用.sort_index(),首先使用以下方法创建一个新的排序 DataFrame .sort_values()

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> sorted_df = df.sort_values(by=["make", "model"])
>>> sorted_df
    city08  cylinders fuelType  ...  mpgData            trany  year
0       19          4  Regular  ...        Y     Manual 5-spd  1985
18      17          6  Premium  ...        Y  Automatic 4-spd  1993
19      17          6  Premium  ...        N     Manual 5-spd  1993
20      14          8  Premium  ...        N  Automatic 5-spd  1993
21      14          8  Premium  ...        N  Automatic 5-spd  1993
..     ...        ...      ...  ...      ...              ...   ...
12      21          4  Regular  ...        Y     Manual 5-spd  1993
13      18          4  Regular  ...        N  Automatic 4-spd  1993
15      20          4  Regular  ...        N     Manual 5-spd  1993
16      18          4  Regular  ...        Y  Automatic 4-spd  1993
17      19          4  Regular  ...        Y     Manual 5-spd  1993
[100 rows x 10 columns]

您已经创建了一个使用多个值排序的 DataFrame。请注意行索引是如何没有特定顺序的。要将新 DataFrame 恢复到原始顺序,您可以使用.sort_index()

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> sorted_df.sort_index()
    city08  cylinders fuelType  ...  mpgData            trany  year
0       19          4  Regular  ...        Y     Manual 5-spd  1985
1        9         12  Regular  ...        N     Manual 5-spd  1985
2       23          4  Regular  ...        Y     Manual 5-spd  1985
3       10          8  Regular  ...        N  Automatic 3-spd  1985
4       17          4  Premium  ...        N     Manual 5-spd  1993
..     ...        ...      ...  ...      ...              ...   ...
95      17          6  Regular  ...        Y  Automatic 3-spd  1993
96      17          6  Regular  ...        N  Automatic 4-spd  1993
97      15          6  Regular  ...        N  Automatic 4-spd  1993
98      15          6  Regular  ...        N     Manual 5-spd  1993
99       9          8  Premium  ...        N  Automatic 4-spd  1993
[100 rows x 10 columns]

现在索引按升序排列。就像in.sort_values()的默认参数是,您可以通过传递 更改为降序。对索引进行排序对数据本身没有影响,因为值不变。ascending.sort_index()TrueFalse

当您使用.set_index(). 如果要使用makemodel列设置自定义索引,则可以将列表传递给.set_index()

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> assigned_index_df = df.set_index(
...     ["make", "model"]
... )
>>> assigned_index_df
                                  city08  cylinders  ...            trany  year
make        model                                    ...
Alfa Romeo  Spider Veloce 2000        19          4  ...     Manual 5-spd  1985
Ferrari     Testarossa                 9         12  ...     Manual 5-spd  1985
Dodge       Charger                   23          4  ...     Manual 5-spd  1985
            B150/B250 Wagon 2WD       10          8  ...  Automatic 3-spd  1985
Subaru      Legacy AWD Turbo          17          4  ...     Manual 5-spd  1993
                                  ...        ...  ...              ...   ...
Pontiac     Grand Prix                17          6  ...  Automatic 3-spd  1993
            Grand Prix                17          6  ...  Automatic 4-spd  1993
            Grand Prix                15          6  ...  Automatic 4-spd  1993
            Grand Prix                15          6  ...     Manual 5-spd  1993
Rolls-Royce Brooklands/Brklnds L       9          8  ...  Automatic 4-spd  1993
[100 rows x 8 columns]

使用此方法,您可以用两个轴标签替换默认的基于整数的行索引。这被认为是一个MultiIndex或一个层次索引。您的 DataFrame 现在由多个键索引,您可以使用.sort_index()以下键进行排序:

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> assigned_index_df.sort_index()
                               city08  cylinders  ...            trany  year
make       model                                  ...
Alfa Romeo Spider Veloce 2000      19          4  ...     Manual 5-spd  1985
Audi       100                     17          6  ...  Automatic 4-spd  1993
           100                     17          6  ...     Manual 5-spd  1993
BMW        740i                    14          8  ...  Automatic 5-spd  1993
           740il                   14          8  ...  Automatic 5-spd  1993
                               ...        ...  ...              ...   ...
Volkswagen Golf III / GTI          21          4  ...     Manual 5-spd  1993
           Jetta III               18          4  ...  Automatic 4-spd  1993
           Jetta III               20          4  ...     Manual 5-spd  1993
Volvo      240                     18          4  ...  Automatic 4-spd  1993
           240                     19          4  ...     Manual 5-spd  1993
[100 rows x 8 columns]

首先使用make和列为 DataFrame 分配一个新索引model,然后使用 对索引进行排序.sort_index()。您可以.set_index()在 pandas 文档中阅读有关使用的更多信息。

按索引降序排序

对于下一个示例,您将按索引按降序对 DataFrame 进行排序。请记住,通过对 DataFrame 进行排序.sort_values(),您可以通过设置ascending为来反转排序顺序False。此参数也适用于.sort_index(),因此您可以按相反顺序对 DataFrame 进行排序,如下所示:

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> assigned_index_df.sort_index(ascending=False)
                               city08  cylinders  ...            trany  year
make       model                                  ...
Volvo      240                     18          4  ...  Automatic 4-spd  1993
           240                     19          4  ...     Manual 5-spd  1993
Volkswagen Jetta III               18          4  ...  Automatic 4-spd  1993
           Jetta III               20          4  ...     Manual 5-spd  1993
           Golf III / GTI          18          4  ...  Automatic 4-spd  1993
                               ...        ...  ...              ...   ...
BMW        740il                   14          8  ...  Automatic 5-spd  1993
           740i                    14          8  ...  Automatic 5-spd  1993
Audi       100                     17          6  ...  Automatic 4-spd  1993
           100                     17          6  ...     Manual 5-spd  1993
Alfa Romeo Spider Veloce 2000      19          4  ...     Manual 5-spd  1985
[100 rows x 8 columns]

现在您的 DataFrame 按其索引按降序排序。使用.sort_index()and之间的一个区别.sort_values()是它.sort_index()没有by参数,因为它默认在行索引上对 DataFrame 进行排序。

探索高级索引排序概念

在数据分析中有很多情况您希望对分层索引进行排序。你已经看到了如何使用makemodelMultiIndex。对于此数据集,您还可以将该id列用作索引。

id列设置为索引可能有助于链接相关数据集。例如,EPA 的排放数据集也用于id表示车辆记录 ID。这将排放数据与燃油经济性数据联系起来。在 DataFrame 中对两个数据集的索引进行排序可以使用其他方法(例如.merge(). 要了解有关在 Pandas 中组合数据的更多信息,请查看在 Pandas 中使用 merge()、.join() 和 concat() 组合数据

对 DataFrame 的列进行排序

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

使用数据框 axis

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

使用列标签进行排序

您还可以使用 DataFrame 的列标签作为.sort_index(). 设置根据列标签对 DataFrame 的列axis进行1排序:

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df.sort_index(axis=1)
    city08  cylinders fuelType  ...  mpgData            trany  year
0       19          4  Regular  ...        Y     Manual 5-spd  1985
1        9         12  Regular  ...        N     Manual 5-spd  1985
2       23          4  Regular  ...        Y     Manual 5-spd  1985
3       10          8  Regular  ...        N  Automatic 3-spd  1985
4       17          4  Premium  ...        N     Manual 5-spd  1993
..     ...        ...      ...  ...      ...              ...   ...
95      17          6  Regular  ...        Y  Automatic 3-spd  1993
96      17          6  Regular  ...        N  Automatic 4-spd  1993
97      15          6  Regular  ...        N  Automatic 4-spd  1993
98      15          6  Regular  ...        N     Manual 5-spd  1993
99       9          8  Premium  ...        N  Automatic 4-spd  1993
[100 rows x 10 columns]

DataFrame 的列按字母升序从左到右排序。如果要按降序对列进行排序,则可以使用ascending=False

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df.sort_index(axis=1, ascending=False)
    year            trany mpgData  ... fuelType cylinders  city08
0   1985     Manual 5-spd       Y  ...  Regular         4      19
1   1985     Manual 5-spd       N  ...  Regular        12       9
2   1985     Manual 5-spd       Y  ...  Regular         4      23
3   1985  Automatic 3-spd       N  ...  Regular         8      10
4   1993     Manual 5-spd       N  ...  Premium         4      17
..   ...              ...     ...  ...      ...       ...     ...
95  1993  Automatic 3-spd       Y  ...  Regular         6      17
96  1993  Automatic 4-spd       N  ...  Regular         6      17
97  1993  Automatic 4-spd       N  ...  Regular         6      15
98  1993     Manual 5-spd       N  ...  Regular         6      15
99  1993  Automatic 4-spd       N  ...  Premium         8       9
[100 rows x 10 columns]

使用axis=1in .sort_index(),您可以按升序和降序对 DataFrame 的列进行排序。这在其他数据集中可能更有用,例如列标签对应于一年中的几个月的数据集。在这种情况下,按月按升序或降序排列数据是有意义的。

在 Pandas 中排序时处理丢失的数据

通常,现实世界的数据有很多缺陷。虽然 Pandas 有多种方法可用于在排序前清理数据,但有时在排序时查看丢失的数据还是不错的。你可以用na_position参数来做到这一点。

本教程使用的燃油经济性数据子集没有缺失值。为了说明 的使用na_position,首先您需要创建一些缺失的数据。以下代码基于现有mpgData列创建了一个新列,映射TruempgData等于YNaN不等于的位置:

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df["mpgData_"] = df["mpgData"].map({"Y": True})
>>> df
    city08  cylinders fuelType  ...            trany  year mpgData_
0       19          4  Regular  ...     Manual 5-spd  1985     True
1        9         12  Regular  ...     Manual 5-spd  1985      NaN
2       23          4  Regular  ...     Manual 5-spd  1985     True
3       10          8  Regular  ...  Automatic 3-spd  1985      NaN
4       17          4  Premium  ...     Manual 5-spd  1993      NaN
..     ...        ...      ...  ...              ...   ...      ...
95      17          6  Regular  ...  Automatic 3-spd  1993     True
96      17          6  Regular  ...  Automatic 4-spd  1993      NaN
97      15          6  Regular  ...  Automatic 4-spd  1993      NaN
98      15          6  Regular  ...     Manual 5-spd  1993      NaN
99       9          8  Premium  ...  Automatic 4-spd  1993      NaN
[100 rows x 11 columns]

现在你有一个名为新列mpgData_包含这两个TrueNaN值。您将使用此列查看na_position使用这两种排序方法时的效果。要了解有关使用 的更多信息.map(),您可以阅读Pandas 项目:使用 Python 和 Pandas 制作成绩簿

了解na_position参数.sort_values()

.sort_values()接受一个名为 的参数na_position,它有助于在您排序的列中组织缺失的数据。如果您对缺失数据的列进行排序,那么具有缺失值的行将出现在 DataFrame 的末尾。无论您是按升序还是降序排序,都会发生这种情况。

当您对缺失数据的列进行排序时,您的 DataFrame 如下所示:

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df.sort_values(by="mpgData_")
    city08  cylinders fuelType  ...            trany  year mpgData_
0       19          4  Regular  ...     Manual 5-spd  1985     True
55      18          6  Regular  ...  Automatic 4-spd  1993     True
56      18          6  Regular  ...  Automatic 4-spd  1993     True
57      16          6  Premium  ...     Manual 5-spd  1993     True
59      17          6  Regular  ...  Automatic 4-spd  1993     True
..     ...        ...      ...  ...              ...   ...      ...
94      18          6  Regular  ...  Automatic 4-spd  1993      NaN
96      17          6  Regular  ...  Automatic 4-spd  1993      NaN
97      15          6  Regular  ...  Automatic 4-spd  1993      NaN
98      15          6  Regular  ...     Manual 5-spd  1993      NaN
99       9          8  Premium  ...  Automatic 4-spd  1993      NaN
[100 rows x 11 columns]

要改变这种行为,并有丢失的数据第一次出现在你的数据帧,可以设置na_positionfirst。该na_position参数只接受值last,这是默认值,和first。以下是如何使用na_postion.sort_values()

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 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 的顶部。当您第一次开始分析数据并且不确定是否存在缺失值时,这非常有用。

了解na_position参数.sort_index()

.sort_index()也接受na_position。您的 DataFrame 通常不会将NaN值作为其索引的一部分,因此此参数在.sort_index(). 但是,很高兴知道,如果您的 DataFrame 确实NaN在行索引或列名中存在,那么您可以使用.sort_index()和快速识别这一点na_position

默认情况下,此参数设置为last,将NaN值放置在排序结果的末尾。要改变这种行为,并在你的数据帧先有丢失的数据,设置na_positionfirst

使用排序方法修改你的 DataFrame

在所有的例子你迄今所看到的,都.sort_values().sort_index()已经返回数据帧对象时,你叫那些方法。这是因为在熊猫排序不工作到位默认。通常,这是使用 Pandas 分析数据的最常见和首选方法,因为它会创建一个新的 DataFrame 而不是修改原始数据。这允许您保留从文件中读取数据时的数据状态。

但是,您可以通过指定inplace值为的可选参数来直接修改原始 DataFrame True。大多数 Pandas 方法都包含inplace参数。下面,您将看到一些inplace=True用于对 DataFrame 进行适当排序的示例。

.sort_values()就地使用

随着inplace设置为True,您修改原始数据帧,所以排序方法返回Nonecity08像第一个示例一样按列的值对 DataFrame 进行排序,但inplace设置为True

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df.sort_values("city08", inplace=True)

请注意调用如何.sort_values()不返回 DataFrame。这是原件的df样子:

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df
    city08  cylinders fuelType  ...            trany  year mpgData_
99       9          8  Premium  ...  Automatic 4-spd  1993      NaN
1        9         12  Regular  ...     Manual 5-spd  1985      NaN
80       9          8  Regular  ...  Automatic 3-spd  1985      NaN
47       9          8  Regular  ...  Automatic 3-spd  1985      NaN
3       10          8  Regular  ...  Automatic 3-spd  1985      NaN
..     ...        ...      ...  ...              ...   ...      ...
9       23          4  Regular  ...  Automatic 4-spd  1993     True
8       23          4  Regular  ...     Manual 5-spd  1993     True
7       23          4  Regular  ...  Automatic 3-spd  1993     True
76      23          4  Regular  ...     Manual 5-spd  1993     True
2       23          4  Regular  ...     Manual 5-spd  1985     True
[100 rows x 11 columns]

df对象中,值现在基于city08列按升序排序。您的原始 DataFrame 已被修改,更改将持续存在。避免inplace=True用于分析通常是个好主意,因为对 DataFrame 的更改无法撤消。

.sort_index()就地使用

下一个示例说明这inplace也适用于.sort_index().

由于索引是在您将文件读入 DataFrame 时按升序创建的,因此您可以df再次修改对象以使其恢复到初始顺序。使用.sort_index()inplace设置为True修改数据框:

>>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df.sort_index(inplace=True)
>>> df
    city08  cylinders fuelType  ...            trany  year mpgData_
0       19          4  Regular  ...     Manual 5-spd  1985     True
1        9         12  Regular  ...     Manual 5-spd  1985      NaN
2       23          4  Regular  ...     Manual 5-spd  1985     True
3       10          8  Regular  ...  Automatic 3-spd  1985      NaN
4       17          4  Premium  ...     Manual 5-spd  1993      NaN
..     ...        ...      ...  ...              ...   ...      ...
95      17          6  Regular  ...  Automatic 3-spd  1993     True
96      17          6  Regular  ...  Automatic 4-spd  1993      NaN
97      15          6  Regular  ...  Automatic 4-spd  1993      NaN
98      15          6  Regular  ...     Manual 5-spd  1993      NaN
99       9          8  Premium  ...  Automatic 4-spd  1993      NaN
[100 rows x 11 columns]

现在您的 DataFrame 已使用.sort_index(). 由于您的 DataFrame 仍然具有其默认索引,因此按升序对其进行排序会将数据放回其原始顺序。

如果您熟悉 Python 的内置函数sort()and sorted(),那么inplacepandas 排序方法中可用的参数可能会感觉非常相似。有关更多信息,您可以查看如何在 Python 中使用 sorted() 和 sort()

结论

您现在知道如何使用 pandas 库的两个核心方法:.sort_values().sort_index(). 有了这些知识,您就可以使用 DataFrame 执行基本的数据分析。虽然这两种方法之间有很多相似之处,但通过查看它们之间的差异,可以清楚地知道使用哪一种方法来执行不同的分析任务。

在本教程中,您学习了如何:

  • 按一列或多列的值对Pandas DataFrame进行排序
  • 使用ascending参数更改排序顺序
  • 通过index使用对 DataFrame 进行排序.sort_index()
  • 在对值进行排序时组织缺失的数据
  • 使用set to 对DataFrame进行就地排序inplaceTrue

这些方法是精通数据分析的重要组成部分。它们将帮助您建立一个强大的基础,您可以在此基础上执行更高级的 Pandas 操作。如果您想查看 Pandas 排序方法更高级用法的一些示例,那么 Pandas文档是一个很好的资源。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
GPT-4 重磅发布,有哪些升级和变化?
作者:qizailiu,腾讯 IEG 算法研究员 昨天 OpenAI 发布最新里程碑 AI 语言模型 GPT-4,GPT-4 是一个大型多模态模型(接受图像和文本输入,输出为文本),目前虽然在许多现实世界场景中的能力不如人类,但在各种专业和学术基准上表现出人类水平。 写在前面 本文主要参考 OpenAI 关于 GPT4 的官方 Blog,目前各公众号关于 GPT4 的内容基本来自官方 Blog、技术报告和官方视频内容。相关内容传送门: 官方 Blog 地址:GPT-4 官方 ChatGPT Plus 体验地
腾讯技术工程官方号
2023/04/01
1.5K0
GPT-4 重磅发布,有哪些升级和变化?
最全攻略GPT-4 使用指南
​OpenAI创建了 GPT-4,这是 OpenAI 扩大深度学习努力的最新里程碑。 GPT-4 是一个大型多模态模型(接受图像和文本输入,发出文本输出),虽然在许多现实场景中能力不如人类,但在各种专业和学术基准上表现出人类水平的表现。例如,它通过了模拟律师考试,分数在考生中排名前 10%;相比之下,GPT-3.5 的得分在底部 10% 左右。OpenAI花了 6 个月的时间,利用对抗性测试项目和 ChatGPT 的经验教训,迭代 调整 GPT-4,在真实性、可操纵性和拒绝超出护栏方面取得了有史以来最好的结果(尽管远非完美)。
小小纽扣
2024/04/19
5940
【机器学习】自然语言处理的新前沿:GPT-4与Beyond
这些局限性和挑战为NLP领域的进一步研究指明了方向,激励了Beyond GPT-4技术的探索和发展。接下来,我们将详细探讨这些前沿技术及其应用。
哈__
2024/06/28
1690
【机器学习】自然语言处理的新前沿:GPT-4与Beyond
震撼,支持多模态模型的ChatGPT 4.0发布了
最近几个月,互联网和科技圈几乎ChatGPT刷屏了,各种关于ChatGPT的概念和应用的帖子也是围绕在周围。当去年年底ChatGPT发布的那几天,ChatGPT确实震撼到了所有人,原来AI还可以这么玩,并且对国内的那些所谓的人工智能公司更是旁敲侧击。
xiangzhihong
2023/03/17
2.6K0
震撼,支持多模态模型的ChatGPT 4.0发布了
GPT-4震撼发布,谁能革了ChatGPT的命?
今晨,OpenAI 发布了多模态预训练大模 GPT-4,OpenAI 老板 Sam Altman 直接开门见山地介绍说:“这是我们迄今为止功能最强大的模型!”
叶锦鲤
2023/03/21
1.1K0
GPT-4震撼发布,谁能革了ChatGPT的命?
恐怖的GPT-4到底能做什么,对技术人员有什么影响
GPT-4(Generative Pre-trained Transformer 4)是 OpenAI 发布的最新 GPT 系列模型。它是一个大规模的多模态模型,可以接受图像和文本输入,产生文本输出。输出任务依旧是一个自回归的单词预测任务,这与外界之前的预期略微不同(预期中 GPT-4 多模态会增加语音、图像、视频、文本多模态输入,输出可能也不局限于文字)。
matinal
2023/10/13
4810
GPT-4震撼发布:图像理解、先进的推理能力、惊人的准确性
在 ChatGPT 引爆科技领域之后,人们一直在讨论 AI「下一步」的发展会是什么,很多学者都提到了多模态,我们并没有等太久。今天凌晨,OpenAI 发布了多模态预训练大模型 GPT-4。
AiCharm
2023/05/15
1.4K0
GPT-4震撼发布:图像理解、先进的推理能力、惊人的准确性
一文说透 GPT-4 原理
由于微信公众号更改规则,请点击上面“亨利笔记”关注本号,再点击右上角”...",选择“设为星标”,以免错过文章更新。 作为2023年科技领域的重头戏,以 ChatGPT 为典型代表的大模型成为人工智能技术的引领者。ChatGPT 是一个基于深度学习的自然语言处理模型,使用 Transformer 架构进行训练,在聊天机器人、文本摘要、自然语言生成等方面都有很好的表现。由于在自然语言处理领域中的突出表现,使得 ChatGPT 成为了备受关注的科技新星,而 ChatGPT 背后的 GPT 模型也为众人所关注。
Henry Zhang
2023/04/04
4.3K0
一文说透 GPT-4 原理
ChatGPT新进展GPT-4 模型介绍
2023.3.14 GPT-4 模型发布 创建了GPT-4,这是OpenAI在扩大深度学习方面的最新里程碑。GPT-4是一个大型多模态模型(接受图像和文本输入,输出文本输出),虽然在许多现实场景中不如人类,但在各种专业和学术基准上表现出与人类相当的性能。
Dlimeng
2023/06/30
6590
ChatGPT新进展GPT-4 模型介绍
聊一聊自然语言处理在人工智能领域中的应用
自然语言处理NLP属于AI的一个子领域,专注于让机器理解和生成人类语言,比如机器翻译、情感分析、智能助手这些常见的,但也要想到一些新兴的应用,比如法律文本分析或者教育辅助工具。
漫谈测试
2025/05/01
1170
聊一聊自然语言处理在人工智能领域中的应用
[ChatGPT]一文读懂GPT-4!
今天早上一早醒来,发现各大科技圈公众号平台开始刷屏OpenAI发布的新模型GPT4.0,看这个版本号就已经知道又是一大波特性的更新
宇宙无敌暴龙战士之心悦大王
2023/03/16
5.7K0
大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解
在自然语言处理问题中,可从互联网上下载大量无标注数据,而针对具体问题的有标注数据却非常少,GPT 是一种半监督学习方法,它致力于用大量无标注数据让模型学习 “常识”,以缓解标注信息不足的问题。其具体方法是在针对有标签数据训练 Fine-tune 之前,用无标签数据预训练模型 Pretrain,并保证两种训练具有同样的网络结构。 GPT 底层也基于 Transformer 模型,与针对翻译任务的 Transformer 模型不同的是:它只使用了多个 Deocder 层。
汀丶人工智能
2023/07/18
3.6K0
大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解
比肩GPT-4,商汤日日新大幅升级4.0,多模态能力领先一步
商汤的大模型体系「日日新 SenseNova」今天刚刚发布了 4.0 版,不论语言能力还是文生图能力都有全面升级,还自带低门槛的落地工具。
机器之心
2024/02/06
5010
比肩GPT-4,商汤日日新大幅升级4.0,多模态能力领先一步
ChatGPT的前世今生: 从GPT-1到GPT-4,自然语言处理的壮丽蜕变
在这篇博客中,我们将深入探讨 ChatGPT,这是一个基于 GPT-3.5 架构的大型语言模型。我们将回顾它的前世和今生的演变,从GPT-1和GPT-2的起源开始,一直到ChatGPT的诞生以及其在各个领域的应用。
默 语
2024/11/20
3120
ChatGPT的前世今生: 从GPT-1到GPT-4,自然语言处理的壮丽蜕变
GPT-4 Vision | 指北教程
GPT-4V 于 2022 年接受训练,具有独特的理解图像的能力,而不仅仅是识别物体。它查看来自互联网和其他来源的大量图像,类似于在阅读标题时翻阅巨大的相册。它理解上下文、细微差别和微妙之处,使其能够像我们一样看待世界,但具有机器的计算能力。
iResearch666
2023/12/15
2.4K0
GPT-4 Vision | 指北教程
CVPR2023 Tutorial Talk | 大型多模态模型:构建和超越多模态GPT-4
GPT-4现在很流行。今天我将试图帮助大家构建一个最小版本的多模态GPT-4。我将介绍不同的方式来利用大型语言模型(LLM)进行多模态任务。我将重点讲解端到端训练的模型,以便我们可以构建大型语言模型,保存图像并以合理的速率进行理解。
用户1324186
2023/09/09
1.2K0
CVPR2023 Tutorial Talk | 大型多模态模型:构建和超越多模态GPT-4
李志飞:关于GPT-4的八点观察,多模态大模型竞赛开始
---- 新智元报道   作者:高佳 刘曦 李志飞 编辑:好困 【新智元导读】在标准化测试和其他基准测试中,GPT-4比之前的模型表现得更优异,可以跨数十种语言工作,还可以将图像作为输入对象,这意味着它能够在聊天上下文中理解照片或图表的意图和逻辑。 自微软3月初发布多模态模型 Kosmos-1 以来,一直在测试和调整 OpenAI 的多模态模型,并将其更好地兼容微软自有产品。 果不其然,趁着GPT-4发布之际,微软也正式摊牌,New Bing早就已经用上GPT-4了。 ChatGPT用的语言模型是
新智元
2023/03/29
4030
李志飞:关于GPT-4的八点观察,多模态大模型竞赛开始
GPT-4V医学执照考试成绩超过大部分医学生,AI加入临床还有多远?
人工智能(AI)在医学影像诊断方面的应用已经有了长足的进步。然而,在未经严格测试的情况下,医生往往难以采信人工智能的诊断结果。对于他们来说,理解人工智能根据医学影像给出的判别,需要增加额外的认知成本。
机器之心
2023/11/22
2100
GPT-4V医学执照考试成绩超过大部分医学生,AI加入临床还有多远?
UIUC 李博:GPT-4 比你想象的更「傲慢」
近日,伊利诺伊大学香槟分校(UIUC)的李博教授及其团队与斯坦福大学共同发表的工作 “DecodingTrust: A Comprehensive Assessment of Trustworthiness in GPT Models”一文,提出了一种评价大模型可信性的方法,重点关注 GPT-4 和 GPT-3.5。此文也被多个平台包括Huggingface AMiner 学术平台转发.
AI科技评论
2023/08/08
4770
UIUC 李博:GPT-4 比你想象的更「傲慢」
自然语言处理(NLP)技术在AIGC中的突破
近年来,人工智能生成内容(AIGC)在各行各业中崭露头角。AIGC通过生成文本、图像、音频和视频等多种形式的内容,为用户提供了丰富的体验和强大的工具。在这些技术中,自然语言处理(NLP)作为生成文本和理解语言的核心技术,起到了至关重要的作用。本文将深入探讨NLP技术在AIGC中的突破,并通过代码实例展示其应用。
一键难忘
2024/06/17
1.8K0
推荐阅读
相关推荐
GPT-4 重磅发布,有哪些升级和变化?
更多 >
LV.9
这个人很懒,什么都没有留下~
目录
  • Pandas 排序方法入门
    • 准备数据集
    • 熟悉 .sort_values()
    • 熟悉 .sort_index()
  • 在单列上对 DataFrame 进行排序
    • 按升序按列排序
    • 更改排序顺序
    • 选择排序算法
  • 在多列上对 DataFrame 进行排序
    • 按升序按多列排序
    • 更改列排序顺序
    • 按降序按多列排序
    • 按具有不同排序顺序的多列排序
  • 根据索引对 DataFrame 进行排序
    • 按升序按索引排序
    • 按索引降序排序
    • 探索高级索引排序概念
  • 对 DataFrame 的列进行排序
    • 使用数据框 axis
    • 使用列标签进行排序
  • 在 Pandas 中排序时处理丢失的数据
    • 了解na_position参数.sort_values()
    • 了解na_position参数.sort_index()
  • 使用排序方法修改你的 DataFrame
    • .sort_values()就地使用
    • .sort_index()就地使用
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档