zoukankan      html  css  js  c++  java
  • 4-Pandas数据预处理之排序(df.sort_index()、df.sort_values()、随机重排、随机采样)

    排序是一种索引机制的一种常见的操作方法,也是Pandas重要的内置运算,主要包括以下3种方法:

    排序方法说明
    sort_values() 根据某一列的值进行排序
    sort_index() 根据索引进行排序
    随机重排 详见后面

    本节以新冠肺炎的部分数据为例(读取“today_world_2020_04_18.csv”的国家名、时间、累计确诊、累计治愈、累计死亡这5列)

    一、sort_values()

    注意默认情况下sort_values()是升序排列,ascending = Fals表示降序;

    sort_values()也可以对缺失值进行排序,默认情况下,缺失值是排在最后的,但是可以通过设置参数na_position='first'将缺失值排在最前;

    例:>>>df.sort_values('avg_cur_bal',ascending=True,na_position='first')[:5]

    import pandas as pd
    import numpy as np
    df = pd.read_csv('.input/today_world_2020_04_18.csv',
                     usecols=['name','lastUpdateTime','total_confirm','total_dead','total_heal'],encoding='gbk')
    #使用sort_values()根据累计确诊人数的进行降序重排,并列出排名前10的国家信息;
    df.sort_values('total_confirm',ascending=False)[:10]
    
        name       lastUpdateTime  total_confirm  total_dead  total_heal
    9     美国  2020-04-17 15:01:45         677146       34641       56159
    168  西班牙  2020-04-18 00:00:31         188068       19478       74797
    160  意大利  2020-04-18 03:16:25         172434       22745       40164
    155   法国  2020-04-18 07:35:22         147969       18681       34420
    8     德国  2020-04-18 07:23:10         140886        4326       83114
    159   英国  2020-04-18 00:00:31         108692       14576         622
    2     中国  2020-04-18 08:03:46          84176        4642       77723
    14    伊朗  2020-04-18 00:00:31          79494        4958       54064
    143  土耳其  2020-04-18 03:38:28          78546        1769        8631
    178  比利时  2020-04-18 00:00:31          36138        5163        7961

    二、sort_index()

    >>> df.sort_index(ascending=False)[:5]
          name       lastUpdateTime  total_confirm  total_dead  total_heal
    203  马达加斯加  2020-04-18 07:57:30            117           0          33
    202  列支敦士登  2020-04-12 00:00:31             79           1          55
    201     阿曼  2020-04-18 03:28:30           1069           6         176
    200   罗马尼亚  2020-04-18 03:52:56           8067         411        1508
    199   格恩西岛  2020-03-27 11:33:37              1           0           0

    三、随机重排

    sort_values()和sort_index()只能对DataFrame进行升序或降序排列,若希望随机打乱排列顺序(即随机重排),方法如下

    步骤1使用numpy.random.permutation()产生一个重排后的整数数组【注:numpy.random.permutation可随机排列一个序列,返回一个随机排列后的序号】

    步骤2使用.iloc[]或take()得到重排后的Pandas对象。

    #步骤一:取出随机序列
    >>> import numpy as np
    >>> sampler = np.random.permutation(5)
    >>> sampler
    array([1, 2, 3, 4, 0])
    
    #步骤二:以步骤一得到的随机序列为索引,取出这些数据
    #take()函数
    >>> df.take(sampler)
       name       lastUpdateTime  total_confirm  total_dead  total_heal
    1  塞尔维亚  2020-04-18 00:00:31           5690         110         534
    2    中国  2020-04-18 08:03:46          84176        4642       77723
    3    日本  2020-04-18 00:00:31          10535         210        1657
    4    泰国  2020-04-18 00:00:31           2700          47        1689
    0   突尼斯  2020-04-18 08:09:13            864          37          43
    
    #iloc方法
    >>> df.iloc[sampler]
       name       lastUpdateTime  total_confirm  total_dead  total_heal
    1  塞尔维亚  2020-04-18 00:00:31           5690         110         534
    2    中国  2020-04-18 08:03:46          84176        4642       77723
    3    日本  2020-04-18 00:00:31          10535         210        1657
    4    泰国  2020-04-18 00:00:31           2700          47        1689
    0   突尼斯  2020-04-18 08:09:13            864          37          43

    四、随机采样

       使用sample()进行随机采样,随机采样的量可通过参数n和frac来设置,n表示按照n指定的数量来进行抽样,frac表示按照指定的比例进行抽样。

    注意

      (1)sample默认的是不放回采样(即每个样本只能出现一次),可以通过设置replace = True将其设置为有放回采样;

        例如:>>>df.sample(n=5,replace = True)

      (2)若希望重复某次采样的结果,可以设置random_state参数为同一个数来实现(random_state的大小没有任何意思,只是这是为同一个数来通知两次随机采样的结果相同):

        例如:>>>df.sample(n=5,random_state=1)

      (3)sample也可以实现列的随机采样,只需要设置axis=1即可:

        例如:>>>df.sample(n=2,axis=1)[:5]

    >>> df.sample(3)
            name       lastUpdateTime  total_confirm  total_dead  total_heal
    163       芬兰  2020-04-18 02:51:06           3489          82        1700
    144  巴布亚新几内亚  2020-04-08 00:00:31              2           0           0
    94       索马里  2020-04-16 07:33:23             80           5           2

     使用sample()也可以实现重排

    >>> df.sample(len(df))[:5]
           name       lastUpdateTime  total_confirm  total_dead  total_heal
    99       马里  2020-04-18 03:33:59            190          13          34
    12    圣巴泰勒米  2020-03-27 11:18:38              3           0           0
    117  吉尔吉斯斯坦  2020-04-18 00:00:31            489           5         114
    88     斯威士兰  2020-04-18 07:55:57             19           1           8
    178     比利时  2020-04-18 00:00:31          36138        5163        7961
  • 相关阅读:
    AUDIT审计的一些使用
    HOW TO PERFORM BLOCK MEDIA RECOVERY (BMR) WHEN BACKUPS ARE NOT TAKEN BY RMAN. (Doc ID 342972.1)
    使用BBED理解和修改Oracle数据块
    Using Class of Secure Transport (COST) to Restrict Instance Registration in Oracle RAC [ID 1340831.1]
    调试利器GDB概念
    第4章 思科IOS
    第3章 ip地址和子网划分
    第2章 TCPIP
    2020年阅读过的黑客资源推荐篇
    第1章 计算机网络
  • 原文地址:https://www.cnblogs.com/Cheryol/p/13404778.html
Copyright © 2011-2022 走看看