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

目录
  • 按元素排序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排序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Pandas中Series和DataFrame的索引实现

    正文 在对Series对象和DataFrame对象进行索引的时候要明确这么一个概念:是使用下标进行索引,还是使用关键字进行索引.比如list进行索引的时候使用的是下标,而dict索引的时候使用的是关键字. 使用下标索引的时候下标总是从0开始的,而且索引值总是数字.而使用关键字进行索引,关键字是key里面的值,既可以是数字,也可以是字符串等. Series对象介绍: Series对象是由索引index和值values组成的,一个index对应一个value.其中index是pandas中的Inde

  • pandas 对series和dataframe进行排序的实例

    本问主要写根据索引或者值对series和dataframe进行排序的实例讲解 代码: #coding=utf-8 import pandas as pd import numpy as np #以下实现排序功能. series=pd.Series([3,4,1,6],index=['b','a','d','c']) frame=pd.DataFrame([[2,4,1,5],[3,1,4,5],[5,1,4,2]],columns=['b','a','d','c'],index=['one','

  • 教你漂亮打印Pandas DataFrames和Series

    一.前言 当我们必须处理可能有多个列和行的大型DataFrames时,能够以可读格式显示数据是很重要的.这在调试代码时非常有用. 默认情况下,当打印出DataFrame且具有相当多的列时,仅列的子集显示到标准输出. 显示的列甚至可以多行打印出来. 二.问题 假设我们有以下DataFrame: import pandas as pd import numpy as np df = pd.DataFrame( np.random.randint(0, 100, size=(100, 25)), co

  • python pandas 对series和dataframe的重置索引reindex方法

    reindex更多的不是修改pandas对象的索引,而只是修改索引的顺序,如果修改的索引不存在就会使用默认的None代替此行.且不会修改原数组,要修改需要使用赋值语句. series.reindex() import pandas as pd import numpy as np obj = pd.Series(range(4), index=['d', 'b', 'a', 'c']) print obj d 0 b 1 a 2 c 3 dtype: int64 print obj.reinde

  • 浅谈Pandas:Series和DataFrame间的算术元素

    如下所示: import numpy as np import pandas as pd from pandas import Series,DataFrame 一.Series与Series s1 = Series([1,3,5,7],index=['a','b','c','d']) s2 = Series([2,4,6,8],index=['a','b','c','e']) 索引对齐项相加,不对齐项的值取NaN s1+s2 1 a 3.0 b 7.0 c 11.0 d NaN e NaN d

  • pandas.DataFrame Series排序的使用(sort_values,sort_index)

    目录 按元素排序sort_values() 升序,降序(参数ascending) 多列排序 缺失值NaN的处理(参数na_position) 更改原始对象(参数inplace) 按行方向排序(参数axis) 按索引排序(行名/列名)sort_index() 按行名索引排序 升序,降序(参数ascending) 更改原始对象(参数inplace) 按列名列排序(参数axis) 要对pandas.DataFrame和pandas.Series进行排序,可以使用sort_values()和sort_i

  • pandas dataframe 中的explode函数用法详解

    在使用 pandas 进行数据分析的过程中,我们常常会遇到将一行数据展开成多行的需求,多么希望能有一个类似于 hive sql 中的 explode 函数. 这个函数如下: Code # !/usr/bin/env python # -*- coding:utf-8 -*- # create on 18/4/13 import pandas as pd def dataframe_explode(dataframe, fieldname): temp_fieldname = fieldname

  • Pandas.DataFrame重置Series的索引index(reset_index)

    目录 使用reset_index()将索引重新分配给序列号 基本用法 删除原始索引:参数drop 更改原始对象:参数inplace 使用reset_index()和set_index()将索引更改为另一列(重置) 如果使用reset_index()方法,则可以将pandas.DataFrame,pandas.Series的索引索引(行名称,行标签)重新分配为从0开始的序列号(行号). 如果将行号用作索引,则通过排序更改行的顺序或删除行并得到缺少的号码时,重新索引会更容易. 当行名(行标签)用作索

  • Python数据分析Pandas Dataframe排序操作

    目录 1.索引的排序 2.值的排序 前言: 数据的排序是比较常用的操作,DataFrame 的排序分为两种,一种是对索引进行排序,另一种是对值进行排序,接下来就分别介绍一下. 1.索引的排序 DataFrame 提供了sort_index()方法来进行索引的排序,通过axis参数指定对行索引排序还是对列索引排序,默认为0,表示对行索引排序,设置为1表示对列索引进行排序:ascending参数指定升序还是降序,默认为True表示升序,设置为False表示降序, 具体使用方法如下: 对行索引进行降序

  • Pandas 对Dataframe结构排序的实现方法

    Dataframe结构放在numpy来看应该是二维矩阵的形式,每一列是一个特征,上面会有个列标题,每一行是一个样本. 对Dataframe结构的某一列进行排序方法如下: # 对df表中的user_id这一列进行排序,默认是从小到大排 df = df.sort_index(by='user_id') 对多列进行排序方法如下: # 对user_id,sku_id这两列进行排序 df = df.sort_index(by=['user_id', 'sku_id']) 以上这篇Pandas 对Dataf

  • pandas基础 Series与Dataframe与numpy对二进制文件输入输出

    目录 Series Python numpy对二进制文件输入输出 Series series是一种一维的数组型对象,它包含了一个值序列和一个数据标签 import pandas as pd import numpy as np  创建第一个series: s1=pd.Series([4,7,-5,3])#创建一个series,索引为默认值 print(s1) 通过简单的一个传入数组,就可以形成一个一维的数据表格 获取序列的值和标签序列,应该如何去做? 我们在想这样一个问题,这个序列标签是默认的0

  • Pandas DataFrame 取一行数据会得到Series的方法

    Pandas DataFrame 取一行数据会得到Series的方法 如题,想要取如下dataframe的一行数据,以为得到的还是dataframe lista = [1, 3, 7,4,0] listb = [3, 3, 4,4,5] listc = [3, 3, 4,4,6] df1 = pd.DataFrame({'col1':lista,'col2':listb,'colb':listc}) print(df1) print(df1.loc[0,:]) print(type(df1.lo

  • Pandas分组与排序的实现

    一.pandas分组 1.分组运算过程:split->apply->combine 拆分:进行分组的根据 应用:每个分组运行的计算规则 合并:把每个分组的计算结果合并起来 2.分组函数 DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs by: 依据哪些列进行分组,值可以是:mapping

随机推荐