要对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()方法,请参见以下文章。
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排序内容请搜索aitechtogether.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持aitechtogether.com!