当前位置: 首页 > news >正文

Python 数据分析— Pandas 基本操作(中)

文章目录

  • 学习内容:
    • 一、 创建数据透视表
    • 二、表格合并操作
    • 三、表格分组操作
    • 四、Series 值映射
    • 五、替换 DataFrame 或 Series 中的值


学习内容:

一、 创建数据透视表

pivot_table(values=需聚合的列名默认所有数值列, index=行分组键(数组) [, columns=列上分组的键, aggfunc='sum’求和 | 'mean’均值 默认 | … ,fill_value=空值填充])

df = pd.DataFrame({"A": ["foo", "foo", "foo", "foo", "foo","bar", "bar", "bar", "bar"],"B": ["one", "one", "one", "two", "two","one", "one", "two", "two"],"C": ["small", "large", "large", "small","small", "large", "small", "small","large"],"D": [1, 2, 2, 3, 3, 4, 5, 6, 7],"E": [2, 4, 5, 5, 6, 6, 8, 9, 9]})
'''df结构:A	B	C		D	E
0	foo	one	small	1	2
1	foo	one	large	2	4
2	foo	one	large	2	5
3	foo	two	small	3	5
4	foo	two	small	3	6
5	bar	one	large	4	6
6	bar	one	small	5	8
7	bar	two	small	6	9
8	bar	two	large	7	9'''
df.pivot_table(index='A') # 根据列'A'创建数据透视表
'''输出:D	E
A		
bar	5.5	8.0
foo	2.2	4.4'''
# 以C为列分组,创建A、B的数据透视表,包括D列的和、数量、均值
df.pivot_table('D',index=['A','B'],columns='C',aggfunc=['sum',np.alen,'mean'])
'''输出:sum				alen			meanC	large	small	large	small	large	small
A	B						
bar	one	4.0		5.0		1.0		1.0		4.0		5.0two	7.0		6.0		1.0		1.0		7.0		6.0
foo	one	4.0		1.0		2.0		1.0		2.0		1.0two	NaN		6.0		NaN		2.0		NaN		3.0'''
#在前有基础上,将所胡NaN填充为0
df.pivot_table('D',index=['A','B'],columns='C',aggfunc=['sum',np.alen,'mean'],fill_value=0)
'''输出:sum				alen			meanC	large	small	large	small	large	small
A	B						
bar	one	4.0		5.0		1.0		1.0		4.0		5.0two	7.0		6.0		1.0		1.0		7.0		6.0
foo	one	4.0		1.0		2.0		1.0		2.0		1.0two	0		6.0		0		2.0		0		3.0'''

二、表格合并操作

pd.merge(left=左表(或Series) , right=右表, how=连接方式’left’按左键 | 'right’按右键 | ‘outer’ 左右键并集| ‘inner’左右键交集默认 | ‘cross’按两表笛卡尔集, on=共有键标签, left_on=左键标签(或left_index=True左表行索引), right_on=右键标签(或 right_index=True右表行索引), suffixes=同名标签后缀默认为[’_x’, ‘_y’]) -> DataFrame
注:当左右表有多个同名键时,同名键相乘组合

df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'lfoo'],'value': [1, 2, 3, 5]})
'''df1结构:lkey	value
0	foo		1
1	bar		2
2	baz		3
3	foo		5'''
df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'rfoo'],'value': [5, 6, 7, 8]})
'''df2结构:rkey	value
0	foo		5
1	bar		6
2	baz		7
3	foo		8'''
pd.merge(df1,df2,left_on='lkey',right_on='rkey') # 两表交集
'''输出:lkey	value_x	rkey	value_y
0	foo		1		foo		5
1	bar		2		bar		6
2	baz		3		baz		7'''
pd.merge(df1,df2,left_on='lkey',right_on='rkey',how='left') # 左表索引,右表无时为NaN
'''输出:lkey	value_x	rkey	value_y
0	foo		1		foo		5.0
1	bar		2		bar		6.0
2	baz		3		baz		7.0
3	lfoo	5		NaN		NaN'''

三、表格分组操作

groupby(by=分组标签[, axis=分割方向0行默认 | 1列]) -> DataFrameGroupBy[Scalar]

df = pd.DataFrame({'动物名': ['Falcon', 'Falcon','Parrot', 'Parrot'],'类型':['Captive', 'Wild', 'Captive', 'Wild'],'速度': [380., 370., 24., 26.]})
'''df结构:动物	类型	速度
0	鹰	豢养	380.0
1	鹰	野生	370.0
2	鹦鹉	豢养	24.0
3	鹦鹉	野生	26.0'''
a = df.groupby('动物') # 按动物名分组
#a是:<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f74d710b8>
list(a)
'''输出:
[('鹰',动物  类型     速度0  鹰  豢养	  380.01  鹰  野生	  370.0),('鹦鹉',动物  类型    速度2  鹦鹉  豢养 	 24.03  鹦鹉  野生 	 26.0)]'''

利用get_group函数获取指定组数据

df.groupby('动物').get_group('鹦鹉')
'''输出:动物	类型	速度
2	鹦鹉	豢养	24.0
3	鹦鹉	野生	26.0'''

利用agg函数,对分组数据进行后序操作
求和(sum)、均值(mean)、中位数(median)、计数(count)、去重后个数(nunique)等

a = df.groupby('动物')
a.agg('max')
'''输出:类型	速度
动物		
鹦鹉	野生	26.0
鹰	野生	380.0'''

四、Series 值映射

map(映射关系, na_action=空值处理None同样映射,默认 | 'ignore’不传递) -> Series[S2@map]
DataFrame变量.列索引 -> 返回该列 Series 对象
1. 根据字典对应关系生成新序列

s = pd.Series(['cat', 'dog', np.nan, 'rabbit'])
'''s结构:
0       cat
1       dog
2       NaN
3    rabbit
dtype: object'''
s.map({'cat':'猫', 'dog':'狗', 'rabbit':'兔'})
'''输出:
0      猫
1      狗
2    NaN
3      兔
dtype: object'''

2. 格式化生成新序列

s.map('I am a {}'.format) # 不跳过空值
'''输出:
0       I am a cat
1       I am a dog
2       I am a nan
3    I am a rabbit
dtype: object'''
s.map('I am a {}'.format,na_action='ignore') # 跳过空值
'''输出:
0       I am a cat
1       I am a dog
2              NaN
3    I am a rabbit
dtype: object'''

五、替换 DataFrame 或 Series 中的值

replace( to_replace = 原值, value=新值, inplace=是否在原位置更改True是 | False否 默认) -> None

df = pd.DataFrame({'名称':['产品1','产品2','产品3','产品4','产品5'],'单价':[5,3,'N',7,2],'合计':[15,12,'N','S',8]})
'''df结构:名称		单价	合计
0	产品1	5	15
1	产品2	3	12
2	产品3	N	N
3	产品4	7	S
4	产品5	2	8'''
df.replace('N',0) # 将表格中的N替换为0,原表不变,输出
'''	名称		单价	合计
0	产品1	5	15
1	产品2	3	12
2	产品3	0	0
3	产品4	7	S
4	产品5	2	8'''
df.replace({'N':0, 'C':21},inplace=True) #将表中的N替换为0,S替换为21,在原表中更改
'''df=名称		单价	合计
0	产品1	5	15
1	产品2	3	12
2	产品3	0	0
3	产品4	7	21
4	产品5	2	8'''

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • pikachu文件包含漏洞靶场(本地文件包含+远程文件包含关卡)
  • 维信小程序禁止截屏/录屏
  • sqlalchemy简单使用
  • 统一NLP和目标检测的DETR(一)——self attention、encoder、decoder
  • Android14音频进阶之定制ramdisk文件系统init服务(八十三)
  • Java Web —— 扩展(Maven高级)
  • 【2024】Datawhale X 李宏毅苹果书 AI夏令营 Task3
  • 《亿级流量系统架构设计与实战》第十二章 评论服务
  • SqlServer: 安装或升级到SqlServer2022
  • 反序列化漏洞(一)
  • 【架构-28】轮询,最小连接、随机等负载均衡算法
  • 角谷猜想——考拉兹猜想
  • springblade-JWT认证缺陷漏洞CVE-2021-44910
  • IDEA取消自动选择光标所在行
  • 【unity知识】OnAnimatorMove+root motion,Root Motion+Blend Tree,解决Animator动画和位移不同步问题
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【前端学习】-粗谈选择器
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • docker容器内的网络抓包
  • Git同步原始仓库到Fork仓库中
  • httpie使用详解
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JDK 6和JDK 7中的substring()方法
  • MYSQL 的 IF 函数
  • nginx 配置多 域名 + 多 https
  • node-glob通配符
  • PHP面试之三:MySQL数据库
  • React16时代,该用什么姿势写 React ?
  • Wamp集成环境 添加PHP的新版本
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 跳前端坑前,先看看这个!!
  • 微信小程序开发问题汇总
  • 为什么要用IPython/Jupyter?
  • 小程序开发之路(一)
  • 移动端解决方案学习记录
  • 原生 js 实现移动端 Touch 滑动反弹
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 在Mac OS X上安装 Ruby运行环境
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • # Redis 入门到精通(一)数据类型(4)
  • ( 10 )MySQL中的外键
  • (13):Silverlight 2 数据与通信之WebRequest
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (C++17) std算法之执行策略 execution
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (libusb) usb口自动刷新
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (六)Hibernate的二级缓存
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (数位dp) 算法竞赛入门到进阶 书本题集