用Python做数据分析之数据处理及数据提取

1、数据预处理
第四部分是数据的预处理,对清洗完的数据进行整理以便后期的统计和分析工作。主要包括数据表的合并,排序,数值分列,数据分组及标记等工作。

1)数据表合并
首先是对不同的数据表进行合并,我们这里创建一个新的数据表 df1,并将 df 和 df1 两个数据表进行合并。在 Excel 中没有直接完成数据表合并的功能,可以通过 VLOOKUP 函数分步实现。在 python 中可以通过 merge 函数一次性实现。
下面建立 df1 数据表,用于和 df 数据表进行合并。
1 #创建 df1 数据表
2 df1=pd.DataFrame({‘id’:[1001,1002,1003,1004,1005,1006,1007,1008],
3 ‘gender’:[‘male’,‘female’,‘male’,‘female’,‘male’,‘female’,‘male’,‘female’],
4 ‘pay’:[‘Y’,‘N’,‘Y’,‘Y’,‘N’,‘Y’,‘N’,‘Y’,],
5 ‘m-point’:[10,12,20,40,40,40,30,20]})

使用 merge 函数对两个数据表进行合并,合并的方式为 inner,将两个数据表中共有的数据匹配到一起生成新的数据表。并命名为 df_inner。
1#数据表匹配合并,inner 模式
2df_inner=pd.merge(df,df1,how=‘inner’)

除了 inner 方式以外,合并的方式还有 left,right 和 outer 方式。这几种方式的差别在我其他的文章中有详细的说明和对比。
1#其他数据表匹配模式
2df_left=pd.merge(df,df1,how=‘left’)3df_right=pd.merge(df,df1,how=‘right’)4df_outer=pd.merge(df,df1,how=‘outer’)

2)设置索引列
完成数据表的合并后,我们对 df_inner 数据表设置索引列,索引列的功能很多,可以进行数据提取,汇总,也可以进行数据筛选等。
设置索引的函数为 set_index。
1#设置索引列
2df_inner.set_index(‘id’)

3)排序(按索引,按数值)
Excel 中可以通过数据目录下的排序按钮直接对数据表进行排序,比较简单。Python 中需要使用 ort_values 函数和 sort_index 函数完成排序。
在 python 中,既可以按索引对数据表进行排序,也可以看制定列的数值进行排序。首先我们按 age 列中用户的年龄对数据表进行排序。
使用的函数为 sort_values。
1#按特定列的值排序
2df_inner.sort_values(by=[‘age’])

函数用来将数据表按索引列的值进行排序。
1#按索引列排序
2df_inner.sort_index()

3)数据分组
Excel 中可以通过 VLOOKUP 函数进行近似匹配来完成对数值的分组,或者使用“数据透视表”来完成分组。相应的 python 中使用 where 函数完成数据分组。
Where 函数用来对数据进行判断和分组,下面的代码中我们对 price 列的值进行判断,将符合条件的分为一组,不符合条件的分为另一组,并使用 group 字段进行标记。
1#如果 price 列的值>3000,group 列显示 high,否则显示 low
2df_inner[‘group’] = np.where(df_inner[‘price’] > 3000,‘high’,‘low’)

除了 where 函数以外,还可以对多个字段的值进行判断后对数据进行分组,下面的代码中对 city 列等于 beijing 并且 price 列大于等于 4000 的数据标记为 1。
1#对复合多个条件的数据进行分组标记
2df_inner.loc[(df_inner[‘city’] == ‘beijing’) & (df_inner[‘price’] >= 4000), ‘sign’]=1

4)数据分列
与数据分组相反的是对数值进行分列,Excel 中的数据目录下提供“分列”功能。在 python 中使用 split 函数实现分列。
在数据表中 category 列中的数据包含有两个信息,前面的数字为类别 id,后面的字母为 size 值。中间以连字符进行连接。我们使用 split 函数对这个字段进行拆分,并将拆分后的数据表匹配回原数据表中。

1 #对 category 字段的值依次进行分列,并创建数据表,索引值为 df_inner 的索引列,列名称为 category 和 size
2 pd.DataFrame((x.split(‘-’) for x in df_inner[‘category’]),index
=df_inner.index,columns=[‘category’,‘size’])

1#将完成分列后的数据表与原 df_inner 数据表进行匹配
2df_inner=pd.merge(df_inner,split,right_index=True, left_index=True)

2、数据提取
第五部分是数据提取,也是数据分析中最常见的一个工作。这部分主要使用三个函数,loc,iloc 和 ix,loc 函数按标签值进行提取,iloc 按位置进行提取,ix 可以同时按标签和位置进行提取。下面介绍每一种函数的使用方法。

1)按标签提取(loc)
Loc 函数按数据表的索引标签进行提取,下面的代码中提取了索引列为 3 的单条数据。
1#按索引提取单行的数值
2df_inner.loc[3]3id 10044date 2013-01-05 00:00:005city shenzhen6category 110-C7age 328price 54339gender female10m-point 4011pay Y12group high13sign NaN14category_1 11015size C16Name: 3, dtype: object

使用冒号可以限定提取数据的范围,冒号前面为开始的标签值,后面为结束的标签值。下面提取了 0 到 5 的数据行。
1#按索引提取区域行数值
2df_inner.loc[0:5]

Reset_index 函数用于恢复索引,这里我们重新将 date 字段的日期设置为数据表的索引,并按日期进行数据提取。
1#重设索引
2df_inner.reset_index()

1#设置日期为索引
2df_inner=df_inner.set_index(‘date’)

使用冒号限定提取数据的范围,冒号前面为空表示从 0 开始。提取所有 2013 年 1 月 4 日以前的数据。

1#提取 4 日之前的所有数据
2df_inner[:‘2013-01-04’]

2)按位置提取(iloc)
使用 iloc 函数按位置对数据表中的数据进行提取,这里冒号前后的数字不再是索引的标签名称,而是数据所在的位置,从 0 开始。
1#使用 iloc 按位置区域提取数据
2df_inner.iloc[:3,:2]

iloc 函数除了可以按区域提取数据,还可以按位置逐条提取,前面方括号中的 0,2,5 表示数据所在行的位置,后面方括号中的数表示所在列的位置。
1#使用 iloc 按位置单独提取数据
2df_inner.iloc[[0,2,5],[4,5]]

3)按标签和位置提取(ix)
ix 是 loc 和 iloc 的混合,既能按索引标签提取,也能按位置进行数据提取。下面代码中行的位置按索引日期设置,列按位置设置。
1#使用 ix 按索引标签和位置混合提取数据
2df_inner.ix[:‘2013-01-03’,:4]

4)按条件提取(区域和条件值)
除了按标签和位置提起数据以外,还可以按具体的条件进行数据。下面使用 loc 和 isin 两个函数配合使用,按指定条件对数据进行提取 。
使用 isin 函数对 city 中的值是否为 beijing 进行判断。
1 #判断 city 列的值是否为 beijing
2 df_inner[‘city’].isin([‘beijing’])
3
4 date
5 2013-01-02 True
6 2013-01-05 False
7 2013-01-07 True
8 2013-01-06 False
9 2013-01-03 False
10 2013-01-04 False
11 Name: city, dtype: bool

将 isin 函数嵌套到 loc 的数据提取函数中,将判断结果为 Ture 数据提取出来。这里我们把判断条件改为 city 值是否为 beijing 和 shanghai。如果是就把这条数据提取出来。
1#先判断 city 列里是否包含 beijing 和 shanghai,然后将复合条件的数据提取出来。
2df_inner.loc[df_inner[‘city’].isin([‘beijing’,‘shanghai’])]

5)按筛选条件提取
数值提取还可以完成类似数据分列的工作,从合并的数值中提取出制定的数值。
1 category=df_inner[‘category’]
2 0 100-A
3 3 110-C
4 5 130-F
5 4 210-A
6 1 100-B
7 2 110-A
8 Name: category, dtype: object
9
10 #提取前三个字符,并生成数据表
11pd.DataFrame(category.str[:3])

文章来源:网络 版权归原作者所有
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系小编,我们将立即处理

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

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

相关文章

【Linux】gdb调试

目录 进入调试查看代码运行代码断点打断点查断点删断点从一个断点转跳至下一个断点保留断点但不会运行该断点 退出调试逐过程逐语句监视跳转至指定行运行结束当前函数 进入调试 指令:gdb 【可执行文件】: 查看代码 :l 【第几行】如果输入指…

安全设备

一.防火墙 5层应用层 防火墙 4层 udp tcp 协议 华为 厂商 华为 h3 1.区域划分 Dmz 停火区 Untrust 不安全区域 Trust 安全区域 防火墙 默认禁止所有 二.Waf Web 应用防火墙 放到web前面 产品 雷池 绿盟 软件 安…

递归神经网络 (RNN)

弗朗西斯科佛朗哥 一、说明 循环神经网络非常有趣,因为与前馈网络不同,在前馈网络中,数据只能在一个方向上传播,每个神经元可以与连续层的一个或多个神经元连接,在这种类型的网络中,神经元还可以环回自身或…

MAXScript - tyFlow for 3dsMax

MAXScript - tyFlow for 3dsMax tyFlow 信息 tyFlow_version(): 返回当前安装的tyFlow DLO文件的版本号。tyFlow_found_in_scene(): 返回有关场景中活动tyFlow类(对象、修改器等)数量的信息。 tyFlow 许可 tyFlow_activate_license(): 尝试激活tyFlo…

安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)

技术背景 实时位置(MobilePosition)订阅和上报,对GB28281设备接入终端尤其重要,如移动单兵设备、执法记录仪、智能安全帽、车载终端等,Android国标接入设备通过获取到实时经纬度信息,按照一定的间隔上报到…

竞赛选题 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…

gstreamer插件开发-The event function

event 函数 event函数通知您数据流中发生的特殊事件(如大写、流结束、新段、标记等)。事件可以在上游和下游传播,因此您可以在汇聚节点和源节点上接收它们。 下面是一个非常简单的事件函数,我们将其安装在元素的接收器上。 static gboolean gst_my_fil…

如何使用 VuePress 搭建博客网站并 Vercel 部署

先来看一下网站截图: 快速上手 1.创建并进入一个新目录 mkdir vuepress-starter && cd vuepress-starter2.使用你喜欢的包管理器进行初始化 yarn init # npm init3.将 VuePress 安装为本地依赖 yarn add -D vuepress # npm install -D vuepress4.创建你…

【LeetCode:2520. 统计能整除数字的位数 | 模拟 | HashMap】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Sentinel授权规则和规则持久化

大家好我是苏麟 , 今天说说Sentinel规则持久化. 授权规则 授权规则可以对请求方来源做判断和控制。 授权规则 基本规则 授权规则可以对调用方的来源做控制,有白名单和黑名单两种方式。 白名单:来源(origin)在白名单内的调用…

问题与分类

设计问题 是否已经有类似的解决方案,是否需要当前的设计设计思路的文档话,背景-》 设计思路-》 好处与不足 -》 其他设计思路的对比(淘汰其他设计思路的原因) 设计思路的评审,如何评审,如何量化&#xff…

Nginx禁止域名访问

介绍 Nginx是一种高性能、开源的Web服务器软件,可以通过HTTP或HTTPS协议提供网页服务。它也可以用作反向代理服务器、负载均衡器和HTTP缓存,从而提高Web应用程序的性能。Nginx由Igor Sysoev在2004年开发,以其可扩展性、稳定性和低内存占用而…

面试必考精华版Leetcode994. 腐烂的橘子

题目&#xff1a; 代码&#xff08;2023年10月26日 首刷自解&#xff09;&#xff1a; class Solution { public:int orangesRotting(vector<vector<int>>& grid) {/*统计grid二维数组中有多少新鲜橘子和多少烂橘子&#xff0c;将所有的烂橘子存入一个三元队列…

C++类模板再学习

之前已经学习了C类模板&#xff1b;类模板的写法和一般类的写法有很大的差别&#xff1b;不容易熟悉&#xff1b;下面再做一遍&#xff1b; 做一个椭圆类&#xff0c;成员有长轴长度和短轴长度&#xff1b; // ellipse.h: interface for the ellipse class. // //#if !define…

图论基础和表示

一、概念及其介绍 图论(Graph Theory)是离散数学的一个分支&#xff0c;是一门研究图(Graph)的学问。 图是用来对对象之间的成对关系建模的数学结构&#xff0c;由"节点"或"顶点"(Vertex&#xff09;以及连接这些顶点的"边"&#xff08;Edge&a…

2023年中国医疗器械供应链服务平台发展趋势分析:向国家高端化市场发力[图]

医疗器械供应链服务主要分为全流程供应链服务与院内SPD服务&#xff0c;同时全流程供应链服务主要分为市场、仓储物流与金融三大服务。在SPD数字化赋能下&#xff0c;大数据、云计算等技术支撑促进一站式数字化供应链业务协同平台&#xff0c;带动了整体医疗器械供应链服务的发…

iPhone手机分辨率整理

手机机型(iPhone)屏幕尺寸 (inch)逻辑分辨率(pt)设备分辨率(px)缩放因子(Scale Factor)竖屏安全区域(safeAreaInsets)纵横比(Aspect ratio)像素密度(ppi)2G/3G/3GS3.5320*480320*4801xtop:20 bottom:03&#xff1a;21654/4(s)3.5320*480640*9602xtop:20 bottom:016&#xff1a;…

730. 机器人跳跃问题--二分

题目&#xff1a; 730. 机器人跳跃问题 - AcWing题库 思路&#xff1a; 二分 1.当起始能量E大于最大建筑高度1e5 时&#xff0c;E的能量在整个条约过程中全程递增&#xff0c;则大于E的初始能量也必然成立&#xff08;满足二段性&#xff09;。故最小初始能量范围为[0,1e5]&a…

PostgreSQL 17新特性之登录事件触发器

PostgreSQL 9.3 就提供了事件触发器功能&#xff0c;可以基于 DDL 语句触发相应的操作。 正在开发中的 PostgreSQL 17 增加了基于登录事件的触发器&#xff0c;可以在用户登录时执行某些检查或者特定操作。登录事件触发器的使用方法和其他触发器一样&#xff1a;创建一个返回 …

windows如何查看电脑IP地址

介绍两种查看电脑IP的方式 一、第一种方式 1、在电脑左下角搜索网络连接 2、鼠标右键你目前连接的网络&#xff08;wifi就点wifi 网线就点以太网&#xff09;&#xff1b;选择里面的状态。 3、点击详细信息&#xff0c;这里的IPv4地址就是你电脑的IP。 二、第二种 1、win…