pandas.DataFrameSeries排序的使用(sort_values,sort_index)

Crystal ·
更新时间:2024-11-13
· 33 次阅读

目录

按元素排序sort_values()

升序,降序(参数ascending)

多列排序

缺失值NaN的处理(参数na_position)

更改原始对象(参数inplace)

按行方向排序(参数axis)

按索引排序(行名/列名)sort_index()

按行名索引排序

升序,降序(参数ascending)

更改原始对象(参数inplace)

按列名列排序(参数axis)

要对pandas.DataFrame和pandas.Series进行排序,可以使用sort_values()和sort_index()方法。

请注意,旧版本中存在的sort()方法已废弃。

按元素排序sort_values()

升序,降序(参数ascending)

多列排序

缺失值NaN的处理(参数na_position)

更改原始对象(参数inplace)

按行方向排序(参数axis)

按索引排序(行名/列名)sort_index()

按行名索引排序

升序,降序(参数ascending)

更改原始对象(参数inplace)

按列名列排序(参数axis)

以以下数据为例。

import pandas as pd df = pd.read_csv('./data/17/sample_pandas_normal.csv') print(df) #       name  age state  point # 0    Alice   24    NY     64 # 1      Bob   42    CA     92 # 2  Charlie   18    CA     70 # 3     Dave   68    TX     70 # 4    Ellen   24    CA     88 # 5    Frank   30    NY     57

示例是pandas.DataFrame,但是pandas.Series也具有sort_values()和sort_index(),因此用法是相同的。

按元素排序sort_values()

使用sort_values()方法根据元素值进行排序。

在第一个参数(by)中指定要排序的列的标签(列名)。

df_s = df.sort_values('state') print(df_s) # name age state point # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 4 Ellen 24 CA 88 # 0 Alice 24 NY 64 # 5 Frank 30 NY 57 # 3 Dave 68 TX 70 升序,降序(参数ascending)

默认为升序。如果要使用降序,请将升序参数设置为False。

df_s = df.sort_values('state', ascending=False) print(df_s) # name age state point # 3 Dave 68 TX 70 # 0 Alice 24 NY 64 # 5 Frank 30 NY 57 # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 4 Ellen 24 CA 88 多列排序

如果将第一个参数指定为列表,则可以按多列排序。

从列表的后面开始顺序排序的图像。最后,它按列表中的第一列排序。

df_s = df.sort_values(['state', 'age']) print(df_s) #       name  age state  point # 2  Charlie   18    CA     70 # 4    Ellen   24    CA     88 # 1      Bob   42    CA     92 # 0    Alice   24    NY     64 # 5    Frank   30    NY     57 # 3     Dave   68    TX     70 df_s = df.sort_values(['age', 'state']) print(df_s) #       name  age state  point # 2  Charlie   18    CA     70 # 4    Ellen   24    CA     88 # 0    Alice   24    NY     64 # 5    Frank   30    NY     57 # 1      Bob   42    CA     92 # 3     Dave   68    TX     70

如果将升序参数指定为列表,则可以为每列选择升序或降序。

df_s = df.sort_values(['age', 'state'], ascending=[True, False]) print(df_s) # name age state point # 2 Charlie 18 CA 70 # 0 Alice 24 NY 64 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 # 1 Bob 42 CA 92 # 3 Dave 68 TX 70 缺失值NaN的处理(参数na_position)

如果缺少值NaN,则默认情况下将对其排序。

df_nan = df.copy() df_nan.iloc[:2, 1] = pd.np.nan print(df_nan) #       name   age state  point # 0    Alice   NaN    NY     64 # 1      Bob   NaN    CA     92 # 2  Charlie  18.0    CA     70 # 3     Dave  68.0    TX     70 # 4    Ellen  24.0    CA     88 # 5    Frank  30.0    NY     57 df_nan_s = df_nan.sort_values('age') print(df_nan_s) #       name   age state  point # 2  Charlie  18.0    CA     70 # 4    Ellen  24.0    CA     88 # 5    Frank  30.0    NY     57 # 3     Dave  68.0    TX     70 # 0    Alice   NaN    NY     64 # 1      Bob   NaN    CA     92

如果参数na_position =‘first’,它将被安排在开头。

df_nan_s = df_nan.sort_values('age', na_position='first') print(df_nan_s) # name age state point # 0 Alice NaN NY 64 # 1 Bob NaN CA 92 # 2 Charlie 18.0 CA 70 # 4 Ellen 24.0 CA 88 # 5 Frank 30.0 NY 57 # 3 Dave 68.0 TX 70

要删除缺少的值或将其替换为另一个值,请参阅以下文章。

Pandas删除,替换并提取其中的缺失值NaN(dropna,fillna,isnull)

更改原始对象(参数inplace)

默认情况下,将返回一个新的排序对象,但是如果inplace参数为True,则原始对象本身将被更改。

df.sort_values('state', inplace=True) print(df) # name age state point # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 4 Ellen 24 CA 88 # 0 Alice 24 NY 64 # 5 Frank 30 NY 57 # 3 Dave 68 TX 70 按行方向排序(参数axis)

与前面的示例一样,默认排序为列(垂直)。

如果要按行方向排序,请将参数轴设置为1。其他参数与前面的示例相同。

由于如果数值和字符串混合使用会发生错误,因此在此处删除字符串列,仅显示数值列。有关drop()方法,请参见以下文章。

Pandas.DataFrame删除指定行和列(drop

df_d = df.drop(['name', 'state'], axis=1) print(df_d) #    age  point # 1   42     92 # 2   18     70 # 4   24     88 # 0   24     64 # 5   30     57 # 3   68     70 df_d .sort_values(by=1, axis=1, ascending=False, inplace=True) print(df_d) #    point  age # 1     92   42 # 2     70   18 # 4     88   24 # 0     64   24 # 5     57   30 # 3     70   68 按索引排序(行名/列名)sort_index()

使用sort_index()方法按索引(行名/列名)排序。

按行名索引排序

默认情况下,sort_index()根据行名在列方向(垂直方向)上排序。

print(df) #       name  age state  point # 1      Bob   42    CA     92 # 2  Charlie   18    CA     70 # 4    Ellen   24    CA     88 # 0    Alice   24    NY     64 # 5    Frank   30    NY     57 # 3     Dave   68    TX     70 df_s = df.sort_index() print(df_s) #       name  age state  point # 0    Alice   24    NY     64 # 1      Bob   42    CA     92 # 2  Charlie   18    CA     70 # 3     Dave   68    TX     70 # 4    Ellen   24    CA     88 # 5    Frank   30    NY     57 升序,降序(参数ascending)

与sort_values()一样,默认值为升序。如果要使用降序,请将升序参数设置为False。

df_s = df.sort_index(ascending=False) print(df_s) # name age state point # 5 Frank 30 NY 57 # 4 Ellen 24 CA 88 # 3 Dave 68 TX 70 # 2 Charlie 18 CA 70 # 1 Bob 42 CA 92 # 0 Alice 24 NY 64 更改原始对象(参数inplace)

与sort_values()一样,可以指定参数inplace。如果为True,则更改原始对象。

df.sort_index(inplace=True) print(df) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 按列名列排序(参数axis)

与sort_values()类似,如果设置了参数axis = 1,则根据列名在行方向(水平方向)上进行排序。可以像前面的示例一样使用其他参数。

df_s = df.sort_index(axis=1) print(df_s) #    age     name  point state # 0   24    Alice     64    NY # 1   42      Bob     92    CA # 2   18  Charlie     70    CA # 3   68     Dave     70    TX # 4   24    Ellen     88    CA # 5   30    Frank     57    NY df.sort_index(axis=1, ascending=False, inplace=True) print(df) #   state  point     name  age # 0    NY     64    Alice   24 # 1    CA     92      Bob   42 # 2    CA     70  Charlie   18 # 3    TX     70     Dave   68 # 4    CA     88    Ellen   24 # 5    NY     57    Frank   30

到此这篇关于pandas.DataFrame Series排序的使用(sort_values,sort_index)的文章就介绍到这了,更多相关pandas DataFrame Series排序内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!



sort pandas VALUES INDEX

需要 登录 后方可回复, 如果你还没有账号请 注册新账号