• 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
  • 相关阅读:
    解决VTune错误.../lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ...)
    【环境配置】配置sdk
    Eclipse设置Android Logcat输出字体大小
    Vertica数据库操作
    hihoCoder#1038 : 01背包
    初识Dubbo 系列之4-Dubbo 依赖
    计算机相关专业的同学该怎么用自己的计算机
    十天学习PHP之第三天
    Android之Fragment的优点和作用
    Fragment的生命周期
  • 原文地址:https://www.cnblogs.com/Cheryol/p/13404778.html
Copyright © 2020-2023  润新知