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
posted @ 2020-07-30 16:46  大脸猫12581  阅读(3053)  评论(0编辑  收藏  举报