【pandas2】表格数据的行列操作、查询指定的数据内容、数据类型处理、 缺失值处理和透视表、分组与聚合、数据的纵向合并(扩展数据)、数据的横向合并(连接表)

news2024/11/14 15:01:40

1 表格数据的行列操作
2 查询指定的数据内容
3 数据类型处理
4 缺失值处理
5 透视表
6 分组与聚合
7 统计NBA夺冠次数
8 数据的纵向合并(扩展数据)
9 数据的横向合并(连接表)

1 表格数据的行列操作

# 增
df['info'] = '这些车都很好'
df['desc'] = df['Sec_price'] * df['Km(W)']
df.insert(1,'haha','你好')

# 改
df.rename(columns={'Brand':'品牌'})

# 查
df['Name']

# 删
df.drop(columns='haha',axis=1) 
	axis=1表示列字段
  axis=0表示行索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 查询指定的数据内容

# 获取单列数据
df['Name']
# 获取多列数据
df[['Name','New_price','Sec_price']]

# 获取Discharge是国4的所有数据项
# df['Discharge'] == '国4'  # 布尔值
df[df['Discharge'] == '国4']  # 布尔选择器

# 获取品牌是众泰并且Discharge是国4的所有数据项
# (df['Discharge'] == '国4') & (df['品牌'] == '众泰')  # 布尔值
df[(df['Discharge'] == '国4') & (df['品牌'] == '众泰')]  # 布尔选择器

# 获取品牌是众泰并且Discharge是国4的数据的品牌、Name、New_price
df.loc[(df['Discharge'] == '国4') & (df['品牌'] == '众泰'),['品牌','Name','New_price']]
# 如果针对筛选出来的数据还需要做字段的筛选处理 那么需要使用loc方法

"""
逻辑运算符连接的条件都必须使用括号括起来
"""

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 数据类型处理

# 如何查看字段的数据类型
df.dtypes

# 通过dtypes查看字段的数据类型 将不符合条件的类型进行人为的修改操作
# df['Boarding_time']
# 当字段名存在的时候 不加赋值符号表示获取数据 加了赋值符号表示修改数据
df['Boarding_time'] = pd.to_datetime(df['Boarding_time'],format='%Y年%m月')  # %Y %m %d %H %M %S %X

# 将New_price字符串类型数据转换成数字类型的数据
# 第一步要想办法将字符串万剔除
##################################
# df['New_price'][:-1]
# df['New_price'].replace('万','')
# 上述两种方法都不能直接处理,如果需要处理需要先加一个内置方法str(固定用法)
# df['New_price'].str[:-1]
# df['New_price'].str.replace('万','')
##################################
# 第二步将剩余的部分转换成数字
df['New_price'] = df['New_price'].str[:-1].astype('float')

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 缺失值处理

isnull
notnull
fillna
dropna

# 判断数据是否有缺失
# data05.isnull()  # 当数据量特别大的时候还是不容易查看
data05.isnull().sum()  # 通过sum求和 统计每个字段下缺失数据的个数

# 计算缺失数据占比(绝对是否删除还是填充)
data05.isnull().sum() / data05.shape[0]
"""notnull与isnull刚好相反 这里不做过多的介绍"""

# 删除缺失数据
data05.shape
data05.dropna().shape
"""
针对缺失数据
    我们不能一味的删除,尤其是数据量本来就少的情况下,再删除数据会导致资源的浪费
    所以有时候针对缺失数据我们会采取填充的策略,将缺失数据补全
"""

data05.fillna(value=666)  # 虽然fillna可以填充数据  但是我们在填充数据的时候不能鲁莽的填充相同的值

######################################################
# 应该遵循不同类别的缺失采取不同的填充策略
data05.fillna(value = {
  'gender':data05.gender.mode()[0],  # 众数:可以有一个也可能是多个
  'age':data05.age.mean(),  # 平均值
  'income':data05.income.median()  # 中位数
})
######################################################

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 透视表

我们在学习excel操作的时候都接触过透视表
	本质其实就将一张表按照一定的条件和需求做成另外一张表

data06 = pd.read_csv(r'diamonds.csv')
data06.head()
# 按照颜色分类 之后求解每一个分类下价格的平均值
# pd.pivot_table(data06, index = 'color', values='price', aggfunc='mean')

# 先按照颜色分类 之后再每个颜色分类下 再按照clarity分组 之后求解价格的个数(商品个数)
pd.pivot_table(data06, index = 'color', columns='clarity', values='price', aggfunc='size')

在这里插入图片描述

6 分组与聚合

分组
	按照给定的条件将单个单个的数据组织到一起形成一个一个的整体
聚合
	针对分组之后的整体进行数学统计计算
# MySQL好好复习
# 按照颜色分组
# data06.groupby(['color']).groups
# 按照颜色分组 并统计每个颜色下的商品数量 和 平均价格
data06.groupby(['color']).aggregate({
    'color':'size',
    'price':'mean'
})


# 分组的依据可以有多个
grouped = data06.groupby(by = ['color','cut'])  # 先按照颜色分组 再按照cut分组
# 对分组变量进行统计汇总
result = grouped.aggregate({'color':np.size, 'carat':np.min, 
                            'price':np.mean, 'table':np.max})
result

# 针对分组之后的字段展示 我们可以自定义顺序 也可以在计算的时候就安排好顺序
# 调整变量名的顺序
result = pd.DataFrame(result, columns=['price','color','carat','table'])
result


# 数据集重命名
result.rename(columns={'color':'个数',
                       'carat':'最小重量',
                       'price':'平均价格',
                       'table':'最大面积'})

7 统计NBA夺冠次数

# 如何获取网页球队数据
"""
pd.read_html()
	类似于爬虫,能够爬取页面数据,并且将页面上的table标签里面的数据全部提取出来
"""
如果你的机器执行上述代码报错不要慌张,冷静下来分析,或者直接百度搜索,锻炼自我解决问题的能力,不要遇到问题对他人产生依赖

8 数据的纵向合并(扩展数据)

# 注意:纵向合并表数据需要确保字段名一致
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None)

objs:指定需要合并的对象,可以是序列、数据框或面板数据构成的列表 
axis:指定数据合并的轴,默认为0,表示合并多个数据的行,如果为1,就表示合并多个数据的列
join:指定合并的方式,默认为outer,表示合并所有数据,如果改为inner,表示合并公共部分的数据 
join_axes:合并数据后,指定保留的数据轴 
ignore_index:bool类型的参数,表示是否忽略原数据集的索引,默认为False,如果设为True,就表示忽略原索引并生成新索引
keys:为合并后的数据添加新索引,用于区分各个数据部分
  
  
# 构造数据集df1和df2
df1 = pd.DataFrame({
  'name':['张三','李四','王二'], 
  'age':[21,25,22], 
  'gender':['男','女','男']}
)
df2 = pd.DataFrame({
  'name':['丁一','赵五'], 
  'age':[23,22], 
  'gender':['女','女']}
)
# 数据集的纵向合并
pd.concat([df1,df2] , keys = ['df1','df2'])  # 加keys参数可以在合并之后看到数据来源

pd.concat([df1,df2] , keys = ['df1','df2']).reset_index() 


pd.concat([df1,df2] , keys = ['df1','df2']).reset_index().drop(labels ='level_1', axis = 1).rename(columns = {'level_0':'Class'})



# 如果df2数据集中的“姓名变量为Name”
df2 = pd.DataFrame({
  'Name':['丁一','赵五'], 
  'age':[23,22], 
  'gender':['女','女']}
)
# 数据集的纵向合并
pd.concat([df1,df2])
# concat行合并,数据源的变量名称完全相同(变量名顺序没有要求)

9 数据的横向合并(连接表)

# 与我们在MySQL阶段学习的连接表一模一样
"""
inner join
left join
right join
"""
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'))

left:指定需要连接的主 right:指定需要连接的辅表
how:指定连接方式,默认为inner内连,还有其他选项,如左连left、右连right和外连outer on:指定连接两张表的共同字段
left_on:指定主表中需要连接的共同字段
right_on:指定辅表中需要连接的共同字段 
left_index:bool类型参数,是否将主表中的行索引用作表连接的共同字段,默认为False right_index:bool类型参数,是否将辅表中的行索引用作表连接的共同字段,默认为False sort:bool类型参数,是否对连接后的数据按照共同字段排序,默认为False 
suffixes:如果数据连接的结果中存在重叠的变量名,则使用各自的前缀进行区分
  
  
# 构造数据集
df3 = pd.DataFrame({
  'id':[1,2,3,4,5],
  'name':['张三','李四','王二','丁一','赵五'],
  'age':[27,24,25,23,25],
  'gender':['男','男','男','女','女']})
df4 = pd.DataFrame({
  'Id':[1,2,2,4,4,4,5], 
  'score':[83,81,87,75,86,74,88], 
  'kemu':['科目1','科目1','科目2','科目1','科目2','科目3','科目1']})
df5 = pd.DataFrame({
  'id':[1,3,5],
  'name':['张三','王二','赵五'],
  'income':[13500,18000,15000]})

# 首先df3和df4连接
merge1 = pd.merge(left = df3, 
                  right = df4, 
                  how = 'left', 
                  left_on='id', 
                  right_on='Id')
# 再将连接结果与df5连接
merge2 = pd.merge(left = merge1, 
                  right = df5, 
                  how = 'left')

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

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

相关文章

深度解读SGM41511电源管理芯片I2C通讯协议REG0B寄存器解释

REG0B 是 SGM41511 的第十二个寄存器 也是最后一个寄存器,地址为 0x0B。这个寄存器包含了只读(R)和可读写(R/W)的位。上电复位值(PORV)为 000101xx,其中 x 表示不确定的初始状态。这…

实时数仓,站上产业潮头

在这场新的数据驱动战场里,谁能更好的对数据进行智能、准确、迅速、高性价比的体系化处理,谁能以更低的成本、更高效的能力构建底层的PaaS、IaaS组件,谁就能在如今的市场竞争中构建更具竞争力的业务模型,成为新的弄潮儿。 对Byt…

C#开发中ImageComboBox控件数据源实时变换

在C#开发中,我们如何将控件的数据源实时变换,当然我们可以在窗口实例化的时候指定固定的数据源,但是这样对于用户来说数据源永远固定,并不利于我们对于用户的数据存储,优化用户的操作,遇到这种问题&#xf…

模拟登录页,华为账号一键登录

一、介绍 基于鸿蒙Next模拟账号一键登录,免去账号注册环节二、场景需求 1. 用户场景 新用户: 需要快速注册并登录,以体验华为的服务。 老用户: 希望快速登录,不用每次输入用户名和密码。 2. 界面设计 Logo和标题&#…

RK方案有时一开机要设置GPIO口点平

有时候RK方案,需要一开机就设置GPIO口电平,需要在uboot阶段,board.c #define GPIO_BANK0 0 #define GPIO_BANK1 32 #define GPIO_BANK2 64 #define GPIO_BANK3 …

基于RK3568智慧交通-雷达视频融合一体机,支持鸿蒙

智慧交通-雷达视频融合一体机 随着5G网络与智慧交通车路协同系统在全国各点的落地,作为提升交通安全的前沿技术方案也愈发受到重视。 在交通信控领域,以往的感知技术、无论是地磁、线圈还是摄像头,功能都仅仅局限于数清经过了多少车辆&…

TypeScript类型检查错误 error TS2339

错误产生 上一篇博客写了一个调用摄像头的 demo &#xff0c;用了 vue3 vite &#xff0c;使用了 TypeScript &#xff0c;代码大致如下&#xff1a; <script setup lang"ts"> import { onMounted, ref } from vue; import WelcomeItem from ./WelcomeItem.…

视频监控管理老鼠检测算法应用方案厨房老鼠检测算法源码展示

在当今的现代厨房环境中&#xff0c;维持卫生的重要性不仅仅体现在健康层面&#xff0c;更与整个家庭的生活质量息息相关。随着城市化进程不断加快&#xff0c;城市中的居住空间变得更加拥挤&#xff0c;这导致了一系列家庭管理问题的出现&#xff0c;其中厨房老鼠问题尤为突出…

复杂 RAG 系统的检索规划

文章介绍了REAPER&#xff08;Reasoning based Retrieval Planning for Complex RAG Systems&#xff09;&#xff0c;这是一种基于大型语言模型&#xff08;LLM&#xff09;的规划器&#xff0c;用于在复杂的对话系统中生成检索计划。REAPER旨在解决在大规模异构数据存储中进行…

linux中下载nginx

Nginx是一款高性能的开源Web服务器软件。它可以作为一个HTTP服务器进行网站的发布&#xff0c;也可以作为反向代理服务器进行负载均衡。Nginx以其出色的性能、稳定性和低资源消耗而受到广泛的使用。它的特点包括支持并发连接数高、内存消耗低、事件驱动等&#xff0c;适用于大部…

滚雪球学MyBatis-Plus(01):学前导读

&#x1f300;写在前面 我是bug菌&#xff0c;CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家&#xff0c;C站博客之星Top30&#xff0c;华为云2023年度十佳博主&#xff0c;掘金多年度人气作者Top40&#xff0c;掘金等各大社区平台签约作者&#xff…

Python进阶05-多线程

零、文章目录 Python进阶05-多线程 1、进程 &#xff08;1&#xff09;单任务 单任务&#xff1a;指在同一时间内只执行单个任务。 import time# 定义一个函数&#xff0c;用于实现听音乐 def music():for i in range(3):print(正在听音乐...)time.sleep(0.2)# 定义一个函…

振弦式基岩位移计主要功能探析

在土木工程和地质监测领域&#xff0c;基岩位移计作为一种重要的监测设备&#xff0c;发挥着不可替代的作用。其主要功能在于长期、精准地测量水工结构物、桥梁、建筑、铁路等混凝土结构物与地基之间的开合度(位移)&#xff0c;并同步监测埋设点的温度变化。本文将深入探讨基岩…

【漏洞复现】某联云采 SRM2.0 download 任意文件读取漏洞

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 某联云采 SRM2.0 是一款专门为企业供应链管理设计的采购管理系统。它具备采购流程自动化、供应商管理优化…

LLM大模型入门天花板!《大模型入门:技术原理与实战应用》一本书让你轻松入门大模型(附PDF)

随着大模型技术的不断完善和普及&#xff0c;我们将进入一个由数据驱动、智能辅助的全新工作模式和生活模式。个人和企业将能够利用大模型来降本增效&#xff0c;并创造全新的用户体验。 人工智能是人类探索未来的重要领域之一&#xff0c;以GPT为代表的大模型应用一经推出在短…

【网络安全】服务基础第一阶段——第二节:Windows系统管理基础----虚拟化IP地址以及用户与组管理

目录 一、Windows网络测试工具 1.1.ping命令 1.2.tracert命令 二、IP实验内容 2.1 实验一 2.2 实验二 三、用户与组管理 3.1 用户与账户概述 3.2 用户管理 3.3 用户增删改查 3.4 增加用户 3.5 修改用户属性 3.6 删除用户 3.7 组账户概述 3.8 组账户增删改查 四、…

linux网络编程-原理到应用-附源码(全)

目录 一、计算机网络分层模型 1.1 概念 1.2 OSI 七层模型 1.3 五层模型 1.4 TCP/IP四层模型 二、传输层-TCP协议 2.1 什么是TCP协议&#xff1f; 2.2 TCP的连接的建立和释放 2.3 基于TCP协议-只接受一个连接的范例程序 一、计算机网络分层模型 1.1 概念 计算机网络…

装过mr又卸载了,max报错 mrmateralattribs missing dlls

rendering>scene converter 打开对话框后&#xff0c;current preset 中选择 remove invalid legacy elements&#xff0c;取消open scene converter。。勾选 automaticaly remove missing。再点 convet scene

HTML静态网页成品作业(HTML+CSS)——个人介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

java-Spring框架02

1.AOP 1.概述 AOP &#xff08;Aspect Oriented Programming&#xff09;&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。&#xff08;是对面向对象编程的补充延续&#xff0c;&#xff09; 面向切面编程思想&#…