《Python数据分析实战》

环境搭建

定义变量名时要遵循的规则:

  • 变量名必须以字母或下画线开始,名字中间只能由字母、数字和下画线组成
  • 长度不能超过255个字符
  • 变量名在有效范围内必须具有唯一性
  • 不能使用保留字(关键字)
  • 区分大小写

不能对元组中的元素做修改,只能做切片查询。如果元组中只有1个元素,则需要在这个元素的后面加上逗号。数字100正确的表示方法为(100,)

列表:a=[1,2,3],常用列表函数

函数用途
append()向列表末尾添加单个元素
extend()向列表末尾添加多个元素
pop()删除列表中指定下标对应的元素
remove()删除列表中指定名称的元素,如果列表中有多个相同名称的元素,则只删除第1个

列表切片:

a[0] # 第一个元素
a[-1] # 最后一个元素
a[0:1] # 指定开头到指定结尾
a[:2] # 开头到指定结尾
a[1:] # 指定开头到结尾
a[:] # 所有元素

列表切片的结果只有1个元素,则不再是列表类型,显示为标量值;有多个元素,则依然是列表类型,显示为列表。

集合是无序集的,即集合中元素的位置无法固定,不能像列表、元组一样做切片。

获取字典的键和值,有3种常用操作:

  • keys():获取字典中所有的键
  • values():获取字典中所有键对应的值
  • items():获取字典中所有的键值对

函数

自定义函数语法:

def 函数名称(参数):语句块

规则:

  • 以def关键词开头,后接函数名称和圆括号(),再接冒号
  • 传入的参数必须放在圆括号中,圆括号之间用于定义参数
  • 函数代码块内容以冒号起始,并且缩进
  • return后接函数的最终返回值

匿名函数,一种特殊的自定义函数,特殊在定义的函数没有名称,一般用于功能比较简易的函数。使用lambda来创建匿名函数。语法结构如下:
lambda [arg1 [, arg2,...,argn]]: expression

函数的参数调用通常分为按位置给参数赋值和通过指定参数名称给参数赋值。按位置给参数赋值是对照函数的参数位置一一赋值,但如果遇到函数的参数比较多,并且只需使用到其中一部分参数时,如果按照参数位置赋值,函数就显得比较臃肿、不简洁,则可以通过指定参数名称来给这些参数赋值,即关键字参数赋值。参数赋值方式有两大优点:第一,不再需要考虑参数的顺序,函数的使用将更加容易;第二,可以只对那些希望赋值的参数赋值。

函数的参数分为必选参数和可选参数。

函数用途
type()查询类型

Pandas

NumPy

函数:

  • np.array():创建普通数组
  • np.arange():创建一个指定数字范围内的等差序列数组
  • np.random.rand():生成随机小数
  • astype():数组的数据类型转换
  • reshape():数组的维度转换,将多维数组转换为一维数组
  • flatten():将多维数组转换为一维数组
  • np.concatenate():将多个一维数组合并成一个一维数组,首先要将多个一维数组组织在列表中,然后对列表中的一维数组合并;axis参数指明合并方向,axis=1表示横向合并,axis=0表示纵向合并

np.arange()的3种情况:

  • 1个参数时,起始值默认为0,参数值为终止值,步长值默认为1
  • 2个参数时,第1个参数为起始值,第2个参数为终止值,步长值默认为1
  • 3个参数时,第1个参数为起始值,第2个参数为终止值,第3个参数为步长值。

表格管理技术

DataFrame表格的行索引获取用df.index属性,列索引获取用df.columns属性,如果需要同时获取,则用df.axes属性,只获取行索引可用df.axes[0]表示,只获取列索引可用df.axes[1]表示。

df.dtypes属性可以获取各列的数据类型。

DataFrame表格数据可以按行或列获取,按行获取数据使用df.iterrows(),按列获取数据使用df.iteritems()函数,但这两个函数获取数据后会产生一个生成器对象(generator object)

单列选择的两种方式:

  • df['列标签']
  • df.列标签

选择单列,返回Series类型数据;选择多列,返回DataFrame类型表格。

筛选法只能选择行,不能选择列。

实例:df[[True,False,False,True,True]],在df[]中提供一组布尔值,这组布尔值必须遵循以下两点要求:

  • 布尔值的元素个数必须与df表的行数相同,布尔值与df表的行是一一对应
  • 布尔值必须存储在列表、数组和Series等数据结构中

loc切片法相当于是直接切片法df[]的升级版。

行选择的表示方式有两种:

  • 行索引为自然序号,则格式只能表示为df.loc[行索引序号]
  • 行索引为标签,则格式只能表示为df.loc['行索引标签']

在指定DataFrame表格上添加列时,有直接添加列和df.assign()两种方式,添加列的数据结构可以是列表、数组、Series等可迭代对象。

数据处理基础

mask()与where()结构相同,含义相反。mask()在条件成立时做处理,where()在条件不成立时做处理,均可以对Series和DataFrame进行判断处理。

逻辑统计:all()和any()

遍历函数:

  • map()
  • apply():用来遍历DatFrame的行或列,即遍历Series数据
  • applymap():对DataFrame中的每个元素执行指定函数的处理

聚合函数,如sum(),max(),min(),mean()等。

极大值:nlargest()
极小值:nsmallest()

排名函数:rank(),统计出的名次是小数类型,在rank()之后加astype('int')转换为整数类型。method参数提供对相同值的5种处理方法:

枚举解释
average默认值,对相同值做平均排名
min对相同值做最小排名,美式排名
max对相同值做最大排名
first对相同值出现的顺序做排名
dense与最小排名类似,但不同名次之间差值为1,中式排名

Python中的聚合函数可以对一组任意形式的序列值做统计;Pandas中的聚合函数只能对Series和DataFrame做统计;NumPy中的聚合函数可以对数组、Series和DataFrame做统计,Pandas和NumPy中的聚合函数在对二维数据统计时可以指定聚合方向。

字符串清洗

正则

如果需要重复使用一个正则表达式对象,可将正则表达式预编译成正则表达式对象,提高效率。

常见函数:

  • match():从字符串的开始位置匹配,只返回第1次匹配成功的re.Match对象
  • fullmatch():完整匹配整个字符串,只返回第1次匹配成功的re.Match对象
  • search():从任意位置开始匹配,只返回第1次匹配成功的re.Match对象
  • findall():返回所有匹配成功的数据,返回列表类型,列表可为空,或仅有一个元素
  • finditer():返回所有匹配成功的数据,返回迭代器类型
  • sub():对匹配成功的字符串执行替换处理。可以是普通字符串、有特殊字符的正则表达式、函数
  • split():拆分,返回列表。正则表达式字符串就是拆分的分隔符,如果对正则表达式字符串使用括号进行分组,则所有分组里的内容也会返回列表里。
  • compile():编译正则表达式,将正则表达式转换为re.Pattern对象
txt = '这是一段文本'
re.sub(r'\d+', '、', txt)
re.sub(r'(\d+)', r'\1、', txt)
re.sub(r'\d+', lambda m:m.group() + '、', txt)

sub()的3种不同的替换方式:

  • 替换值为普通字符。代码re.sub(r'\d+', '、', txt),第2参数是’、',表示将匹配成功的连续数字替换为顿号
  • 替换值有特殊字符。代码re.sub(r'(\d+)', r'\1、', txt),第2参数是r’\1、',其中\1表示引用正则表达式中第1个分组的内容,然后与顿号(、)连接
  • 替换值是函数。代码re.sub(r'\d+', lambda m:m.group()+'、', txt),第2参数是lambda m:m.group() + '、',其中lambda m:m.group()是匿名函数,m表示匹配成功后返回的re.Match对象,group()表示获取re.Match对象的值,然后与顿号(、)连接。

语法:re.compile(pattern[,flags])

希望多种匹配模式同时生效,则可以使用字符’|',或直接写在正则表达式字符串的最前面:

re.compile(r'abc', re.U|re.M)
re.compile(r'(?um)abc')

常见正则表达式flags的匹配模式

完整写法简写内联标记注释
re.ASCIIre.A(? a)表示\w、\W、b、\B、\d、\D、\s和\S只匹配ASCII,而不是 Unicode
re.UNICODEre.U(? u)表示\w、\W、\b、B、\d、\D、\s和\S依赖于Unicode 字符属性数据库
re.IGNORECASEre.l(? i)忽略大小写匹配。如表达式要求匹配小写字母,但实际上也会匹配大写字母
re.MULTILINEre.M(? m)多行模式,'^‘匹配整个字符串的开始和每行的开始;’$'匹配整个字符串的结尾和每行的结尾
re.DOTALLre.S(? s)让’.‘特殊字符匹配任何字符,包括换行符。如果没有此标记,则’.'匹配除换行符的其他任意字符
re.VERBOSEre.X(? x)允许编写更具可读性、更友好的正则表达式,忽略空格和#后面的注释

长度匹配,量词匹配,6种模式如下:

边界匹配指单词边界和首尾边界,边界匹配是匹配的位置,元字符如下:

分组匹配,分组就是将正则表达式字符串中被括号引用的部分作为整体。匹配完成后,分组的内容可以被获取,之后可以用\number转义序列进行再次匹配。普通分组与命名分组。

m.group(0)或者m.group()表示获取正则表达式匹配成功的所有数据,包括分组外的数据,m.group(1)表示第1个分组中的数据,m.group(2)表示第2个分组中的数据,以此类推。还可以使用切片的方式提取数据,这种表示方法更为简洁。m[0]与m.group(0)的作用相同,m[1]与m.group(1)的作用相同,以此类推。

日期和时间处理

高级索引

索引按方向可以分为行索引和列索引,按层级分类可分为单层索引和分层索引。在Pandas中行索引和列索引是可以修改的。分层索引(MultiIndex)可在Series或DataFrame上设置多个层次的索引,用于处理更高维度的数据。

分层索引数据的呈现方式还可以使用MultiIndex类下面的函数设置,分别按数组、元组、笛卡儿积和DataFrame这4种方式设置分层索引:

  • pd.MultiIndex.from_arrays()
  • pd.MultiIndex.from_tuples()
  • pd.MultiIndex.from_product()
  • pd.MultiIndex.from_frame()

函数:

  • df.set_index():将某列或某几列数据设置为行索引
  • df.reset_index():将行索引数据设置为列数据
  • df.xs():直接选择指定一个或多个索引层级
  • df.rename():重命名,修改某些索引标签
  • df.sort_index():对索引排序
  • df.swaplevel():各层级之间需要交换位置
  • df.droplevel():删除某些索引层级

数据汇总

数据透视表

  • df.pivot_table():aggfunc参数可以进行聚合处理

表格转换

函数:

  • df.stack():列索引数据转换成行索引数据列,是指将分布在列方向展示的数据转换到行方向来展示。最后的转换结果可以是DataFrame表格或Series数据。将整个列索引层级的数据转换到行方向
  • df.melt():将具体列做转换到行方向
  • pd.melt():和df.melt()相同,多一个frame参数,提供被转换的表格。df.melt()中的df相当于frame参数
  • df.unstack():将行索引数据转换成列索引数据,是指将分布在行方向展示的数据转换到列方向来展示。最后的转换结果可以是DataFrame表格或Series数据
  • df.pivot():转换结果类似数据透视表,不支持数据聚合
  • df.append():执行多表格的纵向拼接
  • pd.concat():实现多表格的纵向、横向拼接
  • df.join():以表格的行索引为连接键做横向拼接,更为灵活
  • pd.merge():df.join()的进阶版

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

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

相关文章

分布式锁注解SyncLock

一、目标: 1、简化手动开关锁的重复代码(专注业务本身) 2、集成不同分布式锁解决方案(锁不同使用方式不同) 3、规范锁的命名和异常信息内容(内容不规范,不易于理解和维护) 4、避免事…

pyspark笔记:over

1 方法介绍 在 PySpark 中,over 函数是一个非常重要的概念,尤其是在使用窗口函数(例如 row_number, rank, dense_rank, lead, lag 等)时。over 函数允许你对一个数据集进行分组,然后在每个分组内应用窗口函数。 1.1 …

Appium 环境配置

Appium 是一个开源的、跨平台的测试框架,可以用来测试 Native App、混合应用、移动 Web 应用(H5 应用)等,也是当下互联网企业实现移动自动化测试的重要工具。Appium 坚持的测试理念: •无需用户对 App 进行任何修改或…

2024年一整年的考试报名时间表不许再错过考试啦

每个大学生都不能错过的超全考试报名表! 有了它谁还会再错过考试哇!!! 1月报名 专转本考试 12月底-1月报名 卫生资格考试 1月中旬报名 教师资格证笔试 1月报名 各省省考 2月报名 医师资格考试 2月报名 初级高级会计 2月报名 计算机…

Java 基础 - Java 多态性详解与实例解析

Java 多态性详解与实例解析 多态性是面向对象编程中的一个重要概念,它允许不同类型的对象以相同的方式对待,从而提高了代码的灵活性和可维护性。在 Java 中,多态性通过继承和方法重写实现,让我们深入了解一下。 什么是多态性? 多态性是指在同一类型的变量调用相同方法时…

架构篇05-复杂度来源:高可用

文章目录 计算高可用存储高可用高可用状态决策小结 今天,我们聊聊复杂度的第二个来源高可用。 参考维基百科,先来看看高可用的定义。 系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。 这个定义…

快速入门:使用 Gemini Embeddings 和 Elasticsearch 进行向量搜索

Gemini 是 Google DeepMind 开发的多模态大语言模型家族,作为 LaMDA 和 PaLM 2 的后继者。由 Gemini Ultra、Gemini Pro 和 Gemini Nano 组成,于 2023 年 12 月 6 日发布,定位为 OpenAI 的竞争者 GPT-4。 本教程演示如何使用 Gemini API 创建…

【代码整理】基于COCO格式的pytorch Dataset类实现

import模块 import numpy as np import torch from functools import partial from PIL import Image from torch.utils.data.dataset import Dataset from torch.utils.data import DataLoader import random import albumentations as A from pycocotools.coco import COCO …

java SSM园林绿化管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM园林绿化管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采…

网易真的大规模裁员吗?

关注卢松松,会经常给你分享一些我的经验和观点。 以前互联网公司裁员,大家不紧张,因为容易找工作,而现在不知道怎么回事,只要以提高某某公司裁员,这就能迅速登上热榜。 这不,最近网传网易裁员1…

二、项目开发计划模板

1.引言 1.1编写目的 1.2项目背景 1.3定义 1.4参考资料 2.项目概述 2.1工作内容 2.2条件与限制 2.3产品 2.4运行环境 2.5服务 2.6验收标准 3.实施计划 3.1任务分解 3.2进度 3.3预算 3.4关键问题 4&#xff…

Linux的IO文件操作和文件系统

前要:本次我想给您带来关于 IO 和文件的知识,而文件在本系列中分为内存上的文件和磁盘上的文件。 1.文件概念 1.1.文件读写 在谈及系统接口之前,我们先来从 C 语言的角度来谈及一些前要知识,以辅助我们后续来理解系统 IO。 我们…

大数据导论(3)---大数据技术

文章目录 1. 大数据技术概述2. 数据采集与预处理2.1 数据采集2.2 预处理 3. 数据存储和管理3.1 分布式基础架构Hadoop3.2 分布式文件系统HDFS3.3 分布式数据库HBase3.4 非关系型数据库NoSQL 4. 数据可视化与保护 1. 大数据技术概述 大数据技术主要包括数据采集与预处理、数据存…

关于常见分布式组件高可用设计原理的理解和思考

文章目录 1. 数据存储场景和存储策略1.1 镜像模式-小规模数据1.2 分片模式-大规模数据 2. 数据一致性和高可用问题2.1 镜像模式如何保证数据一致性2.2 镜像模式如何保证数据高可用2.2.1 HA模式2.2.2 分布式选主模式 2.3 分片模式如何数据一致性和高可用 3. 大规模数据集群的架构…

32 登录页组件

效果演示 实现了一个登录页面的样式,包括一个容器、左侧和右侧部分。左侧部分是一个背景图片,右侧部分是一个表单,包括输入框、复选框、按钮和忘记密码链接。整个页面的背景色为白色,容器为一个圆角矩形,表单为一个半透…

linux C语言socket函数send

在Linux中,使用C语言进行网络编程时,send函数是用于发送数据到已连接的套接字的重要函数之一。它通常用于TCP连接,但也可以用于UDP(尽管对于UDP,通常更推荐使用sendto,因为它允许你指定目标地址和端口&…

建议数据库设计的必选字段

在数据库设计时,建议以下13个字段设置为数据库必要字段,以保证数据的完整和连续。(参考阿里开发规范,结合业务特点) id(id) id 是否删除(if_delete) 用于表达该记录是…

vivado 平台板流程

介绍 板文件使用XML格式来定义有关使用或的系统级板的信息包括AMD设备。AMD可以使用板文件中包含的信息Vivado™ Design Suite和Vivado IP集成商,以促进和验证AMD的连接设备到板。本章讨论董事会文件的不同部分及其用法本附录中所示的示例使用AMD Kintex 7 KC705评…

【linux驱动】用户空间程序与内核模块交互-- IOCTL和Netlink

创建自定义的IOCTL(输入/输出控制)或Netlink命令以便用户空间程序与内核模块交互涉及几个步骤。这里将分别介绍这两种方法。 一、IOCTL 方法 1. 定义IOCTL命令 在内核模块中,需要使用宏定义你的IOCTL命令。通常情况下,IOCTL命令…

python 基础知识点(蓝桥杯python 科目个人复习计划22)

今日复习内容:基础算法中的时间复杂度 时间复杂度分析 时间复杂度是衡量算法执行时间随输入规模增长的增长率。通过分析算法中基本操作的执行次数来确定时间复杂度‘常见的时间复杂度包括:常数时间O(1),线性时间O(n),对数时间O(log n)&…