首页 > 编程语言 >《Python数据分析实战》

《Python数据分析实战》

时间:2024-08-21 17:29:39浏览次数:13  
标签:数据分析 实战 匹配 函数 re Python 索引 参数 df

环境搭建

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

  • 变量名必须以字母或下画线开始,名字中间只能由字母、数字和下画线组成
  • 长度不能超过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.ASCII re.A (? a) 表示\w、\W、b、\B、\d、\D、\s和\S只匹配ASCII,而不是 Unicode
re.UNICODE re.U (? u) 表示\w、\W、\b、B、\d、\D、\s和\S依赖于Unicode 字符属性数据库
re.IGNORECASE re.l (? i) 忽略大小写匹配。如表达式要求匹配小写字母,但实际上也会匹配大写字母
re.MULTILINE re.M (? m) 多行模式,'^'匹配整个字符串的开始和每行的开始;'$'匹配整个字符串的结尾和每行的结尾
re.DOTALL re.S (? s) 让'.'特殊字符匹配任何字符,包括换行符。如果没有此标记,则'.'匹配除换行符的其他任意字符
re.VERBOSE re.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()的进阶版

标签:数据分析,实战,匹配,函数,re,Python,索引,参数,df
From: https://www.cnblogs.com/johnny-wong/p/18372143

相关文章

  • 《Prometheus监控实战》读书笔记
    监控简介Google服务层次结构图,监控是底座一些监控反模式:事后监控机械式监控不(够)准确的监控静态监控:不是说超过某个绝对阈值系统就一定出现问题,更有意义的监控是对比(环比)动态监控。数据库性能分析供应商VividCortex的首席执行官BaronSchwartz对此评论道[插图]:它们比一个停......
  • MySQL子查询、WITH AS、LAG查询统计数据实战
    需求给出一个比较常见的统计类业务需求:统计App(包括iOS和Android两大类)每日新注册用户数、以及累计注册用户数。数据库采用MySQL,根据上面的需求,不难设计表如下:createtableos_day_count(stat_datevarchar(10)notnullcomment'统计日期',osvarcha......
  • 【有源码】大数据背景下基于Python的旅游数据可视化分析与推荐系统k-means满意度分析
    注意:该项目只展示部分功能,如需了解,文末咨询即可。本文目录1.开发环境2系统设计2.1设计背景2.2设计内容3系统页面展示3.1展示页面3.2功能展示视频4更多推荐5部分功能代码5.1爬虫代码5.2词云代码1.开发环境开发语言:Python技术:Flask、协同过滤算法数......
  • 25:Python文件操作
    #文件,读取#f.flush()将文件内容从内存刷到硬盘#f.closed文件如果关闭则返回True#f.encoding查看使用open打开文件的编码#f.tell()查看文件处理当前的光标位置#f.seek(3)从开头开始数,将光标移动到第三个字节#f.truncate(10)从开头开始算,将文件只保留从0-10个......
  • 基于python+flask框架的校园失物招领系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在繁忙的校园生活中,学生们因疏忽大意或急于赶时间而遗失物品的情况时有发生。传统的失物招领方式往往依赖于公告板、校园广播或口口相传,这......
  • 基于python+flask框架的培训机构信息管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着教育行业的蓬勃发展,培训机构作为教育体系中的重要组成部分,其规模与数量日益增加。然而,传统的人工管理模式已难以满足培训机构高效运营......
  • 基于python+flask框架的翼城县土特产合作社管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景翼城县,以其丰富的自然资源和独特的地理环境,孕育了众多优质的土特产品,成为地方经济发展的重要支柱。然而,传统土特产的生产与销售模式往往受......
  • Python自动化脚本学习整理
     10个常用Python自动化脚本https://blog.csdn.net/csdn1561168266/article/details/135757528?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172422930716800184162692%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=1724229307168......
  • python环境配置问题-python+pysimpleGUI
    大家好,今天接到一个客户需求,帮忙配置pycharm后,代码需要可以正常运行用户需求如下:安装库:python环境/pysimpleGUI跑通代码:环境太复杂,需要清理环境后重新配置客户的项目先卸载那些冗余、冲突的Python版本 ,重新配置新环境代码跑通!总结一下客户项目并不复杂,只是自己......
  • 【Linux】python版本控制和环境管理
    @目录1.查看目前python的版本2.添加软件源并更新3.选择你想要下载的版本4.警示:没必要设置默认版本误区千万千万不要覆盖python3软链接解决办法5.pip软件包管理最省心稍微麻烦换源网上有很多教程都是教导小白去官方下载之后编译安装。但是,小白连cmake是什么都不知道,这种教导方式......