python对100G以上的数据进⾏排序,都有什么好的⽅法呢
学习 Pandas排序⽅法是开始或练习使⽤ Python进⾏基本数据分析的好⽅法。最常见的数据分析是使⽤电⼦表格、SQL或pandas 完成的。使⽤ 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 并显⽰前五⾏的命令:
class="highlight">
>>>
>>> import pandas as pd
>>> column_subset = [
... "id",
... "make",
... "model",
... "year",
... "cylinders",
... "fuelType",
... "trany",
... "mpgData",
... "city08",
... "highway08"
... ]
>>> df = pd.read_csv(
... "v/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 1
2 Regular ... N Manual 5-spd 1985
2 2
3
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()沿任⼀轴(列或⾏)对 DataFrame 中的值进⾏排序。通常,您希望通过⼀列或多列的值对 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:
>>> df.sort_values("city08")
city08 cylinders fuelType ... mpgData trany year
99 9 8 Premium ... N Automatic 4-spd 1993
1 9 1
2 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 2
3
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给此参数:
>>>
>>> df.sort_values(
... by="city08",
... ascending=False
... )
city08 cylinders fuelType ... mpgData trany year
9 23 4 Regular ... Y Automatic 4-spd 1993
2 2
3
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 1
2 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]
通过传递False到ascending,您可以颠倒排序顺序。现在,您的 DataFrame 按城市条件下测量的平均 MPG 降序排序。MPG 值最⾼的车辆在第⼀排。
选择排序算法
值得注意的是,pandas 允许您选择不同的排序算法来与.sort_values()和⼀起使⽤.sort_index()。可⽤的算法quicksort,mergesort和heapsort。有关这些不同排序算法的更多信息,请查看Python 中的排序算法。
对单列进⾏排序时默认使⽤的算法是quicksort。要将其更改为稳定的排序算法,请使⽤mergesort。您可以使⽤or 中的kind参数来执⾏此操作,如下所⽰:.sort_values().sort_index()
>>> df.sort_values(
... by="city08",
... ascending=False,
... kind="mergesort"
... )
sort命令排序city08 cylinders fuelType ... mpgData trany year
2 2
3
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 1
2 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:
>>>
>>> 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 2
3 33
[100 rows x 2 columns]
通过指定列名称city08和的列表highway08,您可以使⽤ 对两列上的 DataFrame 进⾏排序.sort_values()。下⼀个⽰例将解释如何指定排序顺序以及为什么注意您使⽤的列名列表很重要。
按升序按多列排序
要在多个列上对 DataFrame 进⾏排序,您必须提供⼀个列名称列表。例如,要按make和排序model,您应该创建以下列表,然后将其传递给.sort_values():
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论