python表格数据分类聚合_3-python数据分析-pandas高级操作之替换、映射、随机抽样、分组、高级数据聚合、数据加载、透视表、交叉表...

3-python数据分析-pandas高级操作之替换、映射、随机抽样、分组、高级数据聚合、数据加载、透视表、交叉表

替换操作 replace

替换操作可以同步作用于Series和DataFrame中

单值替换

普通替换: 替换所有符合要求的元素:to_replace=15,value=’e’

按列指定单值替换: to_replace={列标签:替换值} value=’value’

多值替换

列表替换: to_replace=[] value=[]

字典替换(推荐) to_replace={to_replace:value,to_replace:value}

单值替换

df = DataFrame(data=np.random.randint(0,50,size=(7,5)))

#普通替换

df.replace(to_replace=7, value='seven')

#按列指定单值替换

df.replace(to_replace={0:7}, value='seven')

多值替换

#字典替换(推荐使用)

df.replace(to_replace={7:"seven",40:"四十"})#列表替换

df.replace(to_replace=[7,40],value=['seven','四十'])

映射操作 map

map是Series的方法,只能被Series调用

概念:创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定(给一个元素值提供不同的表现形式)

创建一个df,两列分别是姓名和薪资,然后给其名字起对应的英文名

dic ={'name':['jay','tom','jay'],'salary':[1000,2000,1000]

}

df= DataFrame(data=dic)

#给jay和tom起两个中文名字#映射关系表:表明了映射关系

dic ={'jay':'张三','tom':'李四'}

df['c_name'] = df['name'].map(dic)

运算工具

Series的方法apply也可以像map一样充当运算工具

定义一个方法将它放到map或apply方法中,会将Series中每个元素传到函数中

apply充当运算工具效率要远远高于map,并且apply既可以用在Series也可以用在DataFrame

超过300部分的钱缴纳50%的税,计算每个人的税后薪资

defafter_salary(s):if s > 300:return s - (s-300) * 0.5

returns

df['after_salary'] = df['salary'].map(after_salary)

df['salary'].apply(after_salary)

0650.0

1 1150.0

2 650.0Name: salary, dtype: float64

随机抽样 take

take()  task中的axis参数含义和drop系列的函数一致

np.random.permutation( n)  返回0到n-1之间的乱序序列

df = DataFrame(data=np.random.randint(0,100,size=(100,3)),columns=['A','B','C'])

np.random.permutation(3) #返回0-2之间的乱序序列

array([2, 0, 1])#对原始数据进行打乱,打乱:是对索引打乱#对行列索引进行打乱并进行随机抽样抽取前10个

df.take(indices=np.random.permutation(3),axis=1).take(indices=np.random.permutation(100),axis=0)[0:10]

数据的分类处理 分组groupby

数据分类处理的核心:

groupby()函数可以进行分组

groups属性可以查看分组情况

df = DataFrame({'item':['Apple','Banana','Orange','Banana','Orange','Apple'],'price':[4,3,3,2.5,4,2],'color':['red','yellow','yellow','green','green','green'],'weight':[12,20,50,30,20,44]})

#by 提供了分组条件,通过水果的种类进行分组

df.groupby(by='item')

#查看分组结果

df.groupby(by='item').groups

{'Apple': Int64Index([0, 5], dtype='int64'),'Banana': Int64Index([1, 3], dtype='int64'),'Orange': Int64Index([2, 4], dtype='int64')}

分组聚合

分组的目的就是为了后续对各个小组的聚合计算

计算每一种水果的平均价格

#计算每一种水果的平均价格

df.groupby('item').mean()['price']#不推荐使用上面这种,进行了多余计算,浪费运算成本,# 推荐使用下边这种

df.groupby(by='item')['price'].mean()

item

Apple3.00Banana2.75Orange3.50Name: price, dtype: float64

将每一种水果的平均价格计算出来然后汇总到源数据中

mean_price = df.groupby('item').mean()['price']#直接将其转成字典

mean_price_dic =mean_price.to_dict()

{'Apple': 3.0, 'Banana': 2.75, 'Orange': 3.5}#通过映射,映射到原数据

df['mean_price'] = df['item'].map(mean_price_dic)

求出每一种颜色水果的平均重量,将其汇总到源数据中

#通过color分组计算平均重量并转成字典,通过color映射汇总到原数据

df['color_mean_weight'] = df['color'].map(df.groupby(by='color')['weight'].mean().to_dict())

高级数据聚合

使用groupby分组后,也可以使用transform和apply提供自定义函数实现更多的运算

df.groupby(‘item’)[‘price’].sum() <==> df.groupby(‘item’)[‘price’].apply(sum)

transform和apply都会进行运算,在transform或者apply中传入函数即可

transform和apply也可以传入一个lambda表达式

apply和transform的区别:

transform返回的结果是经过映射后的结果

apply返回的是没有经过映射的结果

#定义的方法需要作用到运算工具中

def my_mean(s): #s是一组数据

sum =0for i ins:

sum+=ireturn sum /len(s)#transform和apply就是运算工具

#transform返回的是映射后的结果,直接可以汇总到原数据

df.groupby(by='item')['price'].transform(my_mean)

03.00

1 2.75

2 3.50

3 2.75

4 3.50

5 3.00Name: price, dtype: float64#apply返回的是没有映射的结果,需要通过map映射才能汇总到原数据

df.groupby('item')['price'].apply(my_mean)

item

Apple3.00Banana2.75Orange3.50Name: price, dtype: float64

数据加载

读取type-.txt文件数据

header 参数header默认是将数据第一行作为列索引,指定None后使用隐式索引

sep 参数sep指定数据通过什么分割

pd.read_csv('./data/type-.txt')

# 指定header等于None不使用第一行作列索引,使用隐式索引pd.read_csv('./data/type-.txt', header=None)

# 指定sep通过"-"分割数据pd.read_csv('./data/type-.txt', header=None, sep='-')

读取数据库中的数据

#连接数据库,获取连接对象

importsqlite3

conn= sqlite3.connect('./data/weather_2012.sqlite')#读取库表中的数据值, 参数(sql语句,连接对象)

pd.read_sql('select * from weather_2012', conn)#将数据写入数据库,参数(表名,连接对象)

text_df.to_sql('text_df', conn)

pd.read_sql('select * from text_df', conn)

透视表 pivot_table

透视表是一种可以对数据动态排布并且分类汇总的表格格式。在pandas中数据透视表被称作pivot_table。

透视表的优点:

灵活性高,可以随意定制你的分析计算要求

脉络清晰易于理解数据

操作性强,报表神器

pivot_table有四个最重要的参数index、values、columns、aggfunc

数据读取

#需要指定引擎和编码,否则会报错乱码

df = pd.read_csv('./data/透视表-篮球赛.csv', engine='python', encoding='utf-8')

index参数

分类汇总的分类条件,每个pivot_table必须拥有一个index

#想看看哈登对阵同一对手在不同主客场下的数据,分类条件为对手和主客场

df.pivot_table(index=['对手','主客场'])

values参数

对计算的数据进行筛选

#如果我们只需要哈登在主客场和不同胜负情况下的得分、篮板与助攻三项数据

df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'])

aggfunc参数

设置对数据聚合时使用的函数

当我们未设置aggfunc时,它默认aggfunc=’mean’计算均值

#想获得哈登在主客场和不同胜负情况下的总得分、总篮板、总助攻时:#将aggfunc参数设为sum,就是对数据求和

df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'], aggfunc='sum')

columns参数

设置列层次字段, 对values字段进行分类

#获取所有队主客场的总得分

df.pivot_table(index='主客场',values='得分', aggfunc='sum')

#查看主客场下的总得分的组成元素是谁

df.pivot_table(index='主客场', values='得分', aggfunc='sum', columns='对手')

#fill_value 将空值填充

df.pivot_table(index='主客场', values='得分', aggfunc='sum', columns='对手',fill_value=0)

交叉表 crosstab

是一种用于计算分组的特殊透视图,对数据进行汇总

pd.crosstab(index,colums)

index:分组数据,交叉表的行索引

columns:交叉表的列索引

df = DataFrame({'sex':['man','man','women','women','man','women','man','women','women'],'age':[15,23,25,17,35,57,24,31,22],'smoke':[True,False,False,True,True,False,False,True,False],'height':[168,179,181,166,173,178,188,190,160]})

#求出各个性别抽烟的人数

pd.crosstab(index=df.smoke,columns=df.sex)

#求出各个年龄段抽烟人情况

pd.crosstab(index=df.age, columns=df.smoke)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle-SQL-case when 改用 DECODE

SELECT CASE FLOOR_LINE_ID WHEN 1 THEN 高铁 WHEN 2 THEN 高速 WHEN 3 THEN 公路 WHEN 5 THEN 地铁 ELSE 其他 END AS LINE_NAME, FLOOR_LINE_ID FROM ( SELECT FLOOR(LINE_ID/100) AS FLOOR_LINE_ID FROM DT4_LINE_NAME ) 改…

lcp mysql cluster_Mysql Cluster 非root用户启动ndbd节点报错

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼1.配置文件&#xff0c;如下&#xff1a;[rootcent178 ~]# ls -lart /etc/my.cnf-rw-rw-r-- 1 mysql mysql 3055 Oct 31 17:29 /etc/my.cnf2.集群数据存储文件夹&#xff0c;如下&#xff1a;[rootcent178 ~]# ls -lart /var/lib/m…

fatal: Could not read from remote repository.的解决办法

原文地址&#xff1a;http://blog.csdn.net/huahua78/article/details/52330792 --------------------------------------------------------------------------------- 查看远端地址 git remote –v 查看配置 git config --list git status git add . // 暂存所有的更改git…

python中mako中loop_python中Mako库实例用法

Mako是一个模板库。一种嵌入式的语言&#xff0c;能够实现简化组件布局以及继承&#xff0c;主要的用途也是和作用域有关&#xff0c;但是效果是最直接切灵活的&#xff0c;这些都是mako的基本功能&#xff0c;掌握了基础内容&#xff0c;接下来就是详细的了解讲述&#xff0c;…

springmvc是什么_SpringBoot与SpringMVC的区别是什么?

简单的来说&#xff1a;SpringMVC和SpringBoot都是Spring家族的重要成员。Spring家族的使命就是为了简化而生。SpringMVC简化我们日常Web开发的&#xff0c;后来随着自身的发展&#xff0c;SpringMVC变得臃肿复杂&#xff0c;而SpringBoot则进一步简化了SpringMVC开发。SpringM…

git 上传代码到码云

与码云建立连接教程&#xff1a;http://blog.csdn.net/zengmingen/article/details/76045076 如果完成了上面步骤的&#xff0c;且有了git。上传项目步骤&#xff1a; 代码提交 代码提交一般有五个步骤&#xff1a; 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交…

你不知道的js中关于this绑定机制的解析[看完还不懂算我输]

前言 最近正在看《你不知道的JavaScript》&#xff0c;里面关于this绑定机制的部分讲的特别好&#xff0c;很清晰&#xff0c;这部分对我们js的使用也是相当关键的&#xff0c;并且这也是一个面试的高频考点&#xff0c;所以整理一篇文章分享一下这部分的内容&#xff0c;相信看…

visual studio过期登录不了账户_具有最高管理权限账户,Windows 7设置Administrator密码永不过期...

今天介绍操作系统具有最高管理权限的账户&#xff0c;Windows 7如何设置Administrator账户密码永不过期。小伙伴们可能不知道&#xff0c;和Windows Vista操作系统一样&#xff0c;在Windows 7操作系统中是不能预先使用Administrator这个具有最高管理权限的账户的。同时也可能不…

Tomcat安装与环境变量的配置-Linux+windows

原文链接&#xff1a;http://jingyan.baidu.com/article/8065f87fcc0f182330249841.html ------------------------------------------------------------ 1&#xff0c;新建变量名&#xff1a;JAVA_HOME&#xff0c;变量值&#xff1a;C:\Program Files\Java\jdk1.7.0 2&…

python如何读取配置文件获取url以及hhead_读取INI配置文件内容(头文件head)

/************************************************************FileName: getini.h // 文件名称Author: yuanfen127 // 作者Date: 2005-03-31 // 日期Description: // 描述本文件的内容,功能,内部各部分之间的关系// 以及文本文件与…

cad隐藏图层命令快捷键_cad快捷键f是什么命令?cad中f快捷键都有哪些?

1. F1 该功能键打开AutoCAD帮助窗口。如果用户遇到此软件中的任何功能问题,它可以使用户在线获得帮助。如果用户离线工作,而不是按此键,则该软件的所有功能都将以PDF格式打开。 2. F2 该键将打开一个弹出屏幕,在底部显示命令行。该命令对于在屏幕底部看不到命令窗口的用户很…

angular2或4部署到tomcat中,让他跑起来

原文地址&#xff1a;http://blog.csdn.net/rotating_windmill/article/details/76768793 ------------------------------------------------------------------------- 首先使用构建命令(npm run build或ng build)打包&#xff0c;打包完成后项目中会出现一个dist的目录&…

java 高级编程进阶_JAVA高级编程之hibernate进阶学习

二级缓存hibernate的session缓存在事务级别进行持久化数据的缓存操作。 当然&#xff0c;也有可能分别为每个类(或集合)&#xff0c;配置集群、或 JVM 级别(SessionFactory 级别)的缓存。你甚至可以为之插入一个集群的缓存。注意&#xff0c;缓存永远不知道其他应用程序对持久化…

SpringMvc+Tomcat+Angular4 部署运行

这次的团队开发是&#xff0c;前端开发人员和后台开发人员完全分开开发的。 前端开发采用了Angular4&#xff0c;webstorm 后端开发采用了&#xff1a;springspringmvcmybatis&#xff0c;eclipse --------------------------------------- 最后要整合了。 1、angular项目编…

python爬虫本科容易找工作吗_python爬虫基础学完了,我真的能找到一份工作吗?...

1.能不能找到工作我觉得取决于你技术掌握的程度。2.无论在什么领域&#xff0c;只要你技术到家&#xff0c;都不用愁找不到工作。3.多数人问他们转行能不能找到工作&#xff0c;是想知道这个岗位需要的人多不多&#xff0c;在爬虫这个领域&#xff0c;从事这方面的人应该也不少…

jqgrid demo java_java – jqgrid如何显示服务器端消息

我使用jqGrid以表格格式显示数据,使用JSP和servlet.编辑我想在执行插入,更新,删除等操作时显示来自服务器的错误. (数据类型&#xff1a;“xml”)jqGrid的jQuery("#list10_d").jqGrid({height:250,width:600,url:Assignment?actionAssign,datatype: "xml"…

IPv4地址分类及特征

IPv4地址分类及特征 IP地址后斜杠和数字代表的意思 其中有这样一个IP地址的格式&#xff1a;IP/数字&#xff0c;例如&#xff1a;111.222.111.222/24这种格式平时在内网中用的不多&#xff0c;所以一下子看不懂&#xff0c;最后查了资料才知斜杠后的数字代表的是掩码的位数 “…

查看Scala编译的.class文件

Scala是基于JDK运行的&#xff0c;必然会生成Java的字节码文件.class文件。 如何查看&#xff1f; 编码IDE&#xff1a;IntelliJ IDEA 2017.2 x64 查看class文件工具&#xff1a;jd-gui scala代码如下&#xff1a; person.scala package cn.zengmg.day26class Person {val …

python传文件给堡垒机上远程的另一个机器_如何用hive调度堡垒机上的python脚本...

工作中&#xff0c;如果我们本地要操作的数据量大&#xff0c;那么主机是跑不起来python脚本的&#xff0c;这个时候&#xff0c;就要用到服务器(也叫堡垒机)了。那么如何用HIVE调用堡垒机上的python脚本呢&#xff1f;今天小白就总结一下步骤和一些注意事项~1.首先将Python脚本…

SecureCRT如何导出导入配置文件

以SecureCRT7.2.5为例 Options-----Global Options -----General -----Configuration Paths 备份&#xff1a; 进入该文件夹&#xff0c;复制里面的内容到要备份的地方 还原&#xff1a; 将上面的复制的文件&#xff0c;拷贝到 Configuration Paths 下