今天小编来给大家讲一下Pandas模块当中的数据统计与排序,说到具体的就是value_counts()方法以及sort_values()方法。

value_counts()方法,顾名思义,主要是用于计算各个类别出现的次数的,而sort_values()方法则是对数值来进行排序,当然除了这些,还有很多大家不知道的衍生的功能等待被挖掘,下面小编就带大家一个一个的说过去。

导入模块并且读取数据库

我们这次用到的数据集是“非常有名”的泰坦尼克号的数据集,该数据源能够在很多平台上都能够找得到

import pandas as pd
df = pd.read_csv("titanic_train.csv")
df.head()

output

常规的用法

首先我们来看一下常规的用法,代码如下

df['Embarked'].value_counts()

output

S    644
C    168
Q     77
Name: Embarked, dtype: int64

下面我们简单来介绍一下value_counts()方法当中的参数,

DataFrame.value_counts(subset=None,normalize=False,sort=True,ascending=False,dropna=True)

常用到参数的具体解释为:

  • subset: 表示根据什么字段或者索引来进行统计分析

  • normalize: 返回的是比例而不是频次

  • ascending: 降序还是升序来排

  • dropna: 是否需要包含有空值的行

对数值进行排序

上面返回的结果是按照从大到小来进行排序的,当然我们也可以反过来,从小到大来进行排序,代码如下

df['Embarked'].value_counts(ascending=True)

output

Q     77
C    168
S    644
Name: Embarked, dtype: int64

对索引的字母进行排序

同时我们也可以对索引,按照字母表的顺序来进行排序,代码如下

df['Embarked'].value_counts(ascending=True).sort_index(ascending=True)

output

C    168
Q     77
S    644
Name: Embarked, dtype: int64

当中的ascending=True指的是升序排序

包含对空值的统计

默认的是value_counts()方法不会对空值进行统计,那要是我们也希望对空值进行统计的话,就可以加上dropna参数,代码如下

df['Embarked'].value_counts(dropna=False)

output

S      644
C      168
Q       77
NaN      2
Name: Embarked, dtype: int64

百分比式的数据统计

我们可以将数值的统计转化成百分比式的统计,可以更加直观地看到每一个类别的占比,代码如下

df['Embarked'].value_counts(normalize=True)

output

S    0.724409
C    0.188976
Q    0.086614
Name: Embarked, dtype: float64

要是我们希望对能够在后面加上一个百分比的符号,则需要在Pandas中加以设置,对数据的展示加以设置,代码如下

pd.set_option('display.float_format', '{:.2%}'.format)
df['Embarked'].value_counts(normalize = True)

output

S   72.44%
C   18.90%
Q    8.66%
Name: Embarked, dtype: float64

当然除此之外,我们还可以这么来做,代码如下

df['Embarked'].value_counts(normalize = True).to_frame().style.format('{:.2%}')

output

Embarked
S 72.44%
C 18.90%
Q 8.66%

连续型数据分箱

Pandas模块当中的cut()方法相类似的在于,我们这里也可以将连续型数据进行分箱然后再来统计,代码如下

df['Fare'].value_counts(bins=3)

output

(-0.513, 170.776]     871
(170.776, 341.553]     17
(341.553, 512.329]      3
Name: Fare, dtype: int64

我们将Fare这一列同等份的分成3组然后再来进行统计,当然我们也可以自定义每一个分组的上限与下限,代码如下

df['Fare'].value_counts(bins=[-1, 20, 100, 550])

output

(-1.001, 20.0]    515
(20.0, 100.0]     323
(100.0, 550.0]     53
Name: Fare, dtype: int64

分组再统计

pandas模块当中的groupby()方法允许对数据集进行分组,它也可以和value_counts()方法联用更好地来进行统计分析,代码如下

df.groupby('Embarked')['Sex'].value_counts()

output

Embarked  Sex
C         male       95female     73
Q         male       41female     36
S         male      441female    203
Name: Sex, dtype: int64

上面的代码是针对“Embarked”这一类别下的“Sex”特征进行分组,然后再进一步进行数据的统计分析,当然出来的结果是Series数据结构,要是我们想让Series的数据结果编程DataFrame数据结构,可以这么来做,

df.groupby('Embarked')['Sex'].value_counts().to_frame()

数据集的排序

下面我们来谈一下数据的排序,主要用到的是sort_values()方法,例如我们根据“年龄”这一列来进行排序,排序的方式为降序排,代码如下

df.sort_values("Age", ascending = False).head(10)

output

对行索引重新排序

我们看到排序过之后的DataFrame数据集行索引依然没有变,我们希望行索引依然可以是从0开始依次的递增,就可以这么来做,代码如下

df.sort_values("Age", ascending = False, ignore_index = True).head(10)

output

下面我们简单来介绍一下sort_values()方法当中的参数

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', # last,first;默认是lastignore_index=False, key=None)

常用到参数的具体解释为:

  • by: 表示根据什么字段或者索引来进行排序,可以是一个或者是多个

  • axis: 是水平方向排序还是垂直方向排序,默认是垂直方向

  • ascending: 排序方式,是升序还是降序来排

  • inplace: 是生成新的DataFrame还是在原有的基础上进行修改

  • kind: 所用到的排序的算法,有快排quicksort或者是归并排序mergesort、堆排序heapsort等等

  • ignore_index: 是否对行索引进行重新的排序

对多个字段的排序

我们还可以对多个字段进行排序,代码如下

df.sort_values(["Age", "Fare"], ascending = False).head(10)

output

同时我们也可以对不同的字段指定不同的排序方式,如下

df.sort_values(["Age", "Fare"], ascending = [False, True]).head(10)

output

我们可以看到在“Age”一样的情况下,“Fare”字段是按照升序的顺序来排的

自定义排序

我们可以自定义一个函数方法,然后运用在sort_values()方法当中,让其按照自己写的方法来排序,我们看如下的这组数据

df = pd.DataFrame({'product': ['keyboard', 'mouse', 'desk', 'monitor', 'chair'],'category': ['C', 'C', 'O', 'C', 'O'],'year': [2002, 2002, 2005, 2001, 2003],'cost': ['$52', '$24', '$250', '$500', '$150'],'promotion_time': ['20hr', '30hr', '20hr', '20hr', '2hr'],
})

output

当中的“cost”这一列带有美元符号“$”,因此就会干扰排序的正常进行,我们使用lambda方法自定义一个函数方法运用在sort_value()当中

df.sort_values('cost', key=lambda val: val.str.replace('$', '').astype('float64')
)

output

当然我们还可以自定义一个更加复杂一点的函数,并且运用在sort_values()方法当中,代码如下

def sort_by_cost_time(x):if x.name == 'cost':return x.str.replace('$', '').astype('float64')elif x.name == 'promotion_time':return x.str.replace('hr', '').astype('int')else:return xdf.sort_values(['year', 'promotion_time', 'cost'], key=sort_by_cost_time
)

output

还有另外一种情况,例如我们遇到衣服的尺码,XS码、S码、M码、L码又或者是月份,JanFebMarApr等等,需要我们自己去定义大小,这个时候我们需要用到的是CategoricalDtype

cat_size_order = CategoricalDtype(['XS', 'S', 'M', 'L', 'XL'], ordered=True
)
cat_size_order

output

CategoricalDtype(categories=['XS', 'S', 'M', 'L', 'XL'], ordered=True)

于是针对下面的数据

df = pd.DataFrame({'cloth_id': [1001, 1002, 1003, 1004, 1005, 1006],'size': ['S', 'XL', 'M', 'XS', 'L', 'S'],
})

output

我们将事先定义好的顺序应用到该数据集当中,代码如下

df['size'] = df['size'].astype(cat_size_order)
df.sort_values('size')

output

先通过astype()来转换数据类型,然后再进行排序。

对比Excel系列图书累积销量达15w册,让你轻松掌握数据分析技能,感兴趣的同学可以直接在各大电商平台搜索书名了解:

【精华总结】全文4000字、20个案例详解Pandas当中的数据统计分析与排序相关推荐

  1. 20个案例详解 Pandas 当中的数据统计分析与排序

    作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编来给大家讲一下Pandas模块当中的数据统计与排序,说到具体的就是value_counts()方法以及sort_values()方法. valu ...

  2. 【原创干货】6000字、22个案例详解Pandas数据分析/预处理时的实用技巧,超简单...

    上两篇原创的文章,小编主要是讲了数据可视化方面的内容,但是好像看得人不是很多的样子(搞得小编心里拔凉拔凉的....) [硬核干货]4500字.10个案例分享几个Python可视化小技巧,助你绘制高质量 ...

  3. python代码案例详解-第7.20节 案例详解:Python抽象类之真实子类

    第7.20节 案例详解:Python抽象类之真实子类 上节介绍了Python抽象基类相关概念,并介绍了抽象基类实现真实子类的步骤和语法,本节结合一个案例进一步详细介绍. 一. 案例说明 本节定义了图形 ...

  4. 【Python】6000字、22个案例详解Pandas数据分析/预处理时的实用技巧,超简单

    上两篇原创的文章,小编主要是讲了数据可视化方面的内容,但是好像看得人不是很多的样子(搞得小编心里拔凉拔凉的....) [硬核干货]4500字.10个案例分享几个Python可视化小技巧,助你绘制高质量 ...

  5. 22个案例详解Pandas数据分析/预处理时的实用技巧,超简单

    作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编打算来讲一讲数据分析方面的内容,整理和总结一下Pandas在数据预处理和数据分析方面的硬核干货,我们大致会说 Pandas计算交叉列表 Pand ...

  6. 22个案例详解 Pandas 数据分析/预处理时的实用技巧,超简单

    作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编打算来讲一讲数据分析方面的内容,整理和总结一下Pandas在数据预处理和数据分析方面的硬核干货,我们大致会说 Pandas计算交叉列表 Pand ...

  7. 又一个4000字肝货,详解tkinter图形化界面制作流程!

    本期案例是带着大家制作一个属于自己的GUI图形化界面->用于设计签名的哦(效果如下图),是不是感觉很好玩,是不是很想学习呢?限于篇幅,今天我们首先详细讲述一下Tkinter的使用方法.本来不准备 ...

  8. SaaS模式、技术与案例详解——第12章 数据存储

    [本章导读语] 不积跬步,无以至千里. ________<荀子.劝学篇> 信任,或是缺乏充分信任,都是妨碍SaaS推广的首要问题.我们可以说,关于产品.客户.雇员.供应商等的数据是商业运营 ...

  9. shell脚本编程神器之awk语法案例详解

    AWK入门指南 文章目录 shell脚本编程神器之awk语法案例详解 安装AWK AWK 起步示例 AWK程序的结构 执行 awk 程序 awk 的错误提示 简单输出 打印每一行 打印特定行 NF,字 ...

最新文章

  1. 构建一个业务连续的网络
  2. 配置Windows server 2008 R2脱机加入域功能
  3. java高并发(十二)并发容器J.U.C
  4. 如何在VS2008中添加WM_INITDIALOG消息映射
  5. 关于APP更新,两包共存的解决方案
  6. 计算机运行卡英语怎么说,“芯片卡”英语怎么说
  7. 过年,你肯定会用到这款小程序!
  8. 终于记住回车和换行cr lf的来由和含义了 -参考: http://www.cnblogs.com/me115/archive/2011/04/27/2030762.html...
  9. react 绑定 箭头函数_为什么箭头函数和React渲染中的绑定有问题
  10. cad页面布局快捷键_炸裂“图纸集”功能、高手都在偷偷用的CAD图纸管理神器
  11. C++ 面向对象程序三大特性之 继承
  12. LeetCode(706)——设计哈希映射(JavaScript)
  13. ubuntu 安装node.js
  14. 北京市房山区卫星地图下载
  15. Android硬件加速
  16. 【AutoCAD】04.直线类命令
  17. 数字图像处理 自学笔记 (武汉大学 贾永红)
  18. java小组的队名,霸气小组名称口号大全
  19. 浙江中小学信息技术课9月换新教材!快看!
  20. 简易五子棋单机版(tkinter)

热门文章

  1. re:Invent第三天:除了拥抱混合云,AWS还一口气发了这些新产品
  2. 2017年5个网络行业快速发展技术趋势
  3. Memcache-No.03 Memcache相关安装、部署、启动、监控
  4. 沃信科技ERP系统容灾方案概述
  5. Asp SqlDataSource将数据库数据绑定在 GridView
  6. retain/copy/assign区别
  7. 分享10个jQuery页面动态编辑插件
  8. jQuery disable 的应用
  9. 2008软考网络工程师题
  10. java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException