python数据分析——字符串和文本数据2

参考资料:活用pandas库

1、字符串格式化

(1)格式化字符串

        要格式化字符串,需要编写一个带有特殊占位符的字符串,并在字符串上调用format方法向占位符插入值。

# 案例1
var='flesh wound'
s="It's just a {}"
print(s.format(var))

# 案例2,通过索引多次使用变量
s="""Black Knight: 'Tis but a {0}.
King Arthor: A {0}? Your arm's off!"""
print(s.format('scratch'))

# 案例3,也可以给占位符一个变量
s='Hayden Planetarium Coordinates:{lat},{lon}'
print(s.format(lat='40.7815°N',lon='73.9733°W'))

 

(2)格式化数字

# 案例1
s='Some digits of pi:{}'
print(s.format(3.1415926))

# 案例2,使用千分位符
s='In 2005, Lu Chao of China recited {:,} digits of pi'
print(s.format(67890))

# 案例3
# {0:.4}和{0:.4%}中的0表示索引值,4表示保留多少小数位
# 如果添加上%,则会把小数格式化为百分数
s="I remember {0:.4} or {0:.4%} of What Lu Chao recited"
print(s.format(7/67890))

# 案例4
# 在{0:05d}中,第一个0为索引值
# 第二个0是要填充的字符
# 5表示总共有多少个字符
# d表示要使用数字
# 整体表示总共有5个字符,前面使用0进行填充
s="My ID number is {0:05d}"
print(s.format(42))

(3)C printf格式化风格

        在python中,格式化字符串的另一种方法是使用运算符“%”。这遵循的是C printf格式化风格。

# d表示整数
s='I only know %d digits of pi'%7
print(s)

# s代表字符串
# 请注意,字符串模式使用圆括号代替了花括号
# 传入的是一个python字典,使用花括号
s='Some digits of %(cont)s: %(value).2f'%{"cont":'e','value':2.718}
print(s)

(4)python3.6+中的格式化字符串

        格式化字符串(f-strings)的语法,最明显的是字符串必须以字符f开头,这就告诉python此处有格式化字符换,然后,可以直接在占位符{}中使用变量而无须调用format方法。

        使用f-strings的最主要的好处是:可读性更好,执行速度更快,性能也更高。

var='flesh wound'
s=f"It's just a {var}"
print(s)

lat='40.7815°N'
lon='73.9733°W'
s=f'Hayden Planetarium Coordinates:{lat},{lon}'
print(s)

2、正则表达式

        做模式搜索时,如果基本的python字符串方法不够用,可以使用正则表达式。正则表达式功能及其强大,它提供了一种重要的方法来查找和匹配字符串中的模式。其缺点是,复杂的正则表达式难以理解。基础语法如下:

.        匹配所有字符

^        从字符串开头匹配

$        从字符串末尾匹配

*        匹配前一个字符任意次

+        匹配前一个字符一次或多次

?        匹配前一个字符零次或一次

{m}        匹配前一个字符m次

{m,n}        匹配前一个字符,最少匹配m次且最多匹配n次

\        转义字符

[]        一组字符(比如[a-z],表示匹配从a到z之间的左右字符)

|        或。A|B表示匹配A或B

()        精确匹配括号中指定的模式

\d        匹配一个数字字符

\D        匹配一个非数字字符(与\d相反)

\s        匹配任何不可见字符

\S        匹配任何可见字符(与\s相反)

\w        匹配单词字符

\W        匹配任何非单词字符(与\w相反)

        re模块中有很多函数可以用于处理各种需求,常见函数如下:

search        在字符串中进行搜索,成功则返回匹配目标,失败则返回None

match        从字符串开头进行匹配,成功则返回匹配目标,失败则返回None

fullmatch        匹配正则字符串

split        根据模式分割字符串

findall        查找字符串中所有非重叠匹配

finditer        类似于findall,但返回python迭代器

sub        用提供的字符串代替匹配模式

(1)匹配模式

# 导入库
import re
tele_num='1234567890'
m=re.match(pattern='\d{10}',string=tele_num)
print(type(m))
print(m)
print(bool(m))

        查看输出的match对象,如果存在匹配,span会给出匹配字符串的索引,match会给出精确匹配到的字符串。很多时候,当以某个模式匹配字符串时,只需要一个True或False值,用于指出是否存在匹配。

        正则表达式常在if语句中用作条件,在这种情况下,无须进行bool类型转换。

# 正则表达式常在if语句中用作条件,在这种情况下,无须进行bool类型转换。
if m:
    print('match')
else:
    print('no match')
    
# 如果想获取匹配对象的某些值,可以使用match对象的一些方法
# 获取第一个匹配字符串的索引
print(m.start())
# 获取最后一个匹配字符的索引
print(m.end())
# 获取第一个和最后一个匹配字符的索引
print(m.span())
# 获取与指定模式相匹配的字符串
print(m.group())

        假设新字符串有3个数字、1个空格、另外3个数字、另外一个空格、然后跟着4个数字。空格可以匹配0次或1次。代码如下:

# 可以把RegEx模型看作单独的变量
# 因为它有可能变得更长,让对实际匹配函数的调用难以阅读
tele_num_spaces='123 456 7890'
p='\d{3}\s?\d{3}\s?\d{4}'
m=re.match(pattern=p,string=tele_num_spaces)
print(m)

tele_num_space_paren_dash='(123) 456-7890'
p='\(?\d{3}\)?\s?\d{3}-?\d{4}'
m=re.match(pattern=p,string=tele_num_space_paren_dash)
print(m)

(2)查找模式

        可是使用findall函数来查找模式中的所有匹配项。

p='\d+'
# python连接两个班次靠近的字符串
s='13 Jodie Whittaker, war John Hurt, 12 Peter Capaldi,'\
'11 Matt Smith, 10 David Tennant, 9 Christopher Eccleston'
m=re.findall(pattern=p,string=s)
print(m)

(3)模式替代

multi_str="""Guard: What? Ridden on a horse?
King Arthor: Yes!
Guard: You're using coconuts!
King Arthor: What?
Guard: You've got ... coconuts.
"""
p='\w+\s?\w+:\s?'
s=re.sub(pattern=p,string=multi_str,repl='')
print(s)

(4)编译模式

        python的re模块支持对模式进行编译,以便复用它。这可以提升性能,特别是当数据集很大时,性能提升会更明显。语法和前面的几乎相同。首先编写好正则表达式模式,但这次不把它直接保存在变量中,而是把模式字符串传递到compile函数中并保存结果。然后就可以在这个编译好的模式上调用其他re函数了。而且,由于模式已经编译好了,无须再在方法中指定模式参数了。

p=re.compile('\d{10}')
s='1234567890'
m=p.match(s)
print(m)

p=re.compile('\d+')
s='13 Jodie Whittaker, war John Hurt, 12 Peter Capaldi,'\
'11 Matt Smith, 10 David Tennant, 9 Christopher Eccleston'
m=p.findall(s)
print(m)

(5)regex库

        re库是python应用广泛的正则表达式库,是python内置和默认的正则表达式引擎。不过,正则表达式的重度用户可能会觉得regex库比re库更好,功能也更全面。regex库和re库是向互兼容的。感兴趣的同学可以自行测试。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

求斐波那契数列第n项的值

本期介绍🍖 主要介绍:什么是斐波那契数列,递归实现求斐波那契数列第n项值,递归法为什么不适合求斐波那契数,用迭代法实现求斐波那契数列的值👀。 文章目录 1. 斐波那契数列是什么?2. 题目2. 递归…

Java开发大厂面试第26讲:生产环境如何排查问题和优化 JVM?

通过前面几个课时的学习,相信你对 JVM 的理论及实践等相关知识有了一个大体的印象。而本课时将重点讲解 JVM 的排查与优化,这样就会对 JVM 的知识点有一个完整的认识,从而可以更好地应用于实际工作或者面试了。 我们本课时的面试题是&#x…

【气象常用】间断时间序列图

效果图: 主要步骤: 1. 数据准备:随机数组 2. 图像绘制:绘制间断的时间序列 详细代码:着急的直接拖到最后有完整代码 步骤一:导入库包及图片存储路径并设置中文字体为宋体,西文为新罗马&…

Foxit PDF Editor Pro福昕PDF编辑器Pro:重塑您的文档编辑体验

在信息爆炸的时代,PDF文件因其跨平台、格式稳定等特性,成为我们日常工作与学习中不可或缺的一部分。然而,面对这些文件时,许多人都会遇到一个共同的难题:如何高效、专业地编辑PDF内容?今天,我要…

企业内网开源OA服务器(办公自动化系统),搭建O2OA基于Linux(openEuler、CentOS8)

本实验环境为openEuler系统(以server方式安装)(CentOS8基本一致,可参考本文) 目录 知识点实验下载安装O2OA安装mysql配置O2OA 知识点 “O2OA” 是一个开源的、基于Java的办公自动化(Office Automation)系统。其名称中的“O2OA”…

CnosDB:深入理解时序数据质量函数

在CnosDB中,我们设计并实现了计算数据质量的多个指标,这些指标可以从多个维度评估时序数据的质量,对于时间戳列,我们考虑数据的缺失点、冗余点和延迟点。对于值列,我们考虑数据的异常值、范围、变化、速度和加速度。 C…

【对角线遍历】python

没啥思路 class Solution:def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:mlen(mat)nlen(mat[0])ret[]if len(mat)0:return retcount0#mn-1是对角线总数while count<mn-1:#x和y的和刚好是count数#偶数为右上走if count%20:xcount if(count<m)else (…

(二十一)【Jmeter】定时器作用域

简述 由于在性能测试中,要模拟用户操作时间差,需要设置操作之间的等待时间,Jmeter中有定时器,那么在使用定时器之前,需要了解定时器的工作原理,是否符合我们业务场景的执行要求? 该文主要讲解Jmeter中定时器作用范围,本次文主要使用两种简单模型来进行说明,可以基于这…

Java进阶学习笔记14——模板方法设计模式

面试和看源码。 谈到设计模式&#xff1a; 1、解决了什么问题&#xff1f; 2、怎么写&#xff1f; 模板方法设计模式解决了什么问题&#xff1f; 解决方法中存在重复代码的问题。 写法&#xff1a; 1&#xff09;定义一个抽象类&#xff1a; 2&#xff09;在里面定义两个方…

【限免】短时傅里叶变换时频分析【附MATLAB代码】

来源&#xff1a;微信公众号&#xff1a;EW Frontier 简介 一种能够同时对信号时域和频域分析的方法——短时傅里叶变换&#xff08;STFT&#xff09;&#xff0c;可以在时频二维角度准确地描述信号 的时间、频域的局部特性&#xff0c;与其他算法不同&#xff0c;通过该算法可…

类和对象【六】友元和内部类

文章目录 友元友元的作用友元的缺点友元函数语法&#xff1a;特点&#xff1a; 友元类语法&#xff1a;特点&#xff1a; 内部类概念特点 友元 友元的作用 友元提供了一种打破封装的方式&#xff0c;有时提供了便利。 友元的主要作用就是打破封装 即可以让一个类的友元函数…

Hive(28): CLIs and Commands客户端和命令

1 Hive CLI $HIVE_HOME/bin/hive是一个shellUtil,通常称之为hive的第一代客户端或者旧客户端,主要功能有两个: 用于以交互式或批处理模式运行Hive查询,注意,此时作为客户端,需要并且能够访问的是Hive metastore服务,而不是hiveserver2服务。用于hive相关服务的启动,比如…

Slash后台管理系统代码阅读笔记 如何实现环形统计图表卡片?

目前&#xff0c;工作台界面的上半部分已经基本梳理完毕了。 接下来&#xff0c;我们看看这个环形图卡片是怎么实现的&#xff1f; 具体代码如下&#xff1a; {/*图表卡片*/} <Row gutter{[16, 16]} className"mt-4" justify"center">{/*环形图表…

海外链游地铁跑酷全自动搬砖挂机掘金变现项目,号称单窗口一天收益30+(教程+工具)

一、项目概述 地铁跑酷海外版国外版自动搬砖挂机掘金项目是一款结合了地铁跑酷元素的在线游戏&#xff0c;为玩家提供一个全新的游戏体验&#xff0c;使得玩家可以轻松地进行游戏&#xff0c;无需手动操作&#xff0c;节省时间和精力。 二、游戏特点 1. 自动化操作&#xff1…

春秋云境CVE-2018-20604

简介 雷风影视CMS是一款采用PHP基于THINKPHP3.2.3框架开发&#xff0c;适合各类视频、影视网站的影视内容管理程序&#xff0c;该CMS存在缺陷&#xff0c;可以通过 admin.php?s/Template/edit/path/*web*..*..*..*..*1.txt 的方式读取任意文件。 正文 1.进入靶场 2./admin…

设计模式之创建型模式---原型模式(ProtoType)

文章目录 概述类图原型模式优缺点优点缺点 代码实现 概述 在有些系统中&#xff0c;往往会存在大量相同或者是相似的对象&#xff0c;比如一个围棋或者象棋程序中的旗子&#xff0c;这些旗子外形都差不多&#xff0c;只是演示或者是上面刻的内容不一样&#xff0c;若此时使用传…

酷开科技以内容为契机,酷开系统向消费者需求的深度挖掘迈进一步

酷开系统还拥有强大的内容资源和推荐算法&#xff0c;能够根据消费者的兴趣爱好为其提供个性化的推荐服务。无论是电影、电视剧、综艺节目&#xff0c;还是新闻、体育、娱乐资讯&#xff0c;酷开系统都能帮助大家快速找到感兴趣的内容&#xff0c;并且通过智能推荐算法不断优化…

Java | Leetcode Java题解之第112题路径总和

题目&#xff1a; 题解&#xff1a; class Solution {public boolean hasPathSum(TreeNode root, int sum) {if (root null) {return false;}if (root.left null && root.right null) {return sum root.val;}return hasPathSum(root.left, sum - root.val) || has…

Leetcode 环形链表|| 快慢指针解法

但是我们不知道 aaa 的值&#xff0c;该怎么办&#xff1f;依然是使用双指针法。考虑构建一个指针&#xff0c;此指针需要有以下性质&#xff1a;此指针和 slow 一起向前走 a 步后&#xff0c;两者在入口节点重合。那么从哪里走到入口节点需要 aaa 步&#xff1f;答案是链表头节…

使用 Azure DevOps 和 Azure Web Apps 进行 .NET Core 应用的 CI/CD

概览 在现代软件开发中&#xff0c;快速部署和高效的版本控制系统是非常关键的。通过利用 Azure DevOps 和 Azure Web Apps&#xff0c;开发团队可以实现自动化的持续集成和持续部署&#xff08;CI/CD&#xff09;&#xff0c;从而加快从开发到生产的过程。接下来我们一步步来…