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

news2024/12/27 22:56:19

参考资料:活用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库是向互兼容的。感兴趣的同学可以自行测试。

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

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

相关文章

AI大模型探索之路-实战篇7:Function Calling技术实战:自动生成函数

系列篇章💥 AI大模型探索之路-实战篇4:深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5:探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6:掌握Function Calling的详细流程 目录 系列篇章&#x1f4a…

Python自动化工具(桌面自动化、Web自动化、游戏辅助)

工具介绍 连点工具是一款可以模拟键鼠后台操作的连点器工具。支持鼠标连点、键鼠脚本录制,支持辅助您实现办公自动化以及辅助游戏操作。功能简洁易用,非常方便操作。连点工具让您在在玩游戏、网购抢购的时候全自动点击鼠标!主要功能有&#…

Amesim应用篇-制冷剂压焓图软件Coolpack简介与冷媒流量评估

前言 空调系统仿真不可避免的会涉及到冷媒的物性参数、压焓图等信息。冷媒的物性可以在Amesim中自带的模型中查看。而压焓图可以通过Coolpack软件绘制。 一 软件介绍 Coolpack是个独立的小程序,集成了各种冷媒的性能参数,可以直观查看冷媒工作工况曲线…

力扣538. 把二叉搜索树转换为累加树

Problem: 538. 把二叉搜索树转换为累加树 文章目录 题目描述思路复杂度Code 题目描述 思路 利用二叉搜索树中序遍历的特性,**降序遍历(此处是想表达先遍历其右子树再遍历其左子树这样遍历的过程中每个节点值得大小排序是降序得)**其节点&…

区块链技术和应用二

前言 学习长安链的一些基本原理 官网:长安链开源文档 b站课程:区块链基础与应用 一、共识算法 1.1 POW工作量证明 最长链共识,没听明白 1.2 51%攻击 二、区块链的发展 2.1 区块链1.0到3.0 2.2 共有链、联盟链、私有链 2.3 发展趋势 2.4 扩…

【css3】02-css3新特性之选择器篇

目录 1 属性选择器 2 结构伪类选择器 3 其他选择器 :target和::selection ::first-line和::first-letter 4 伪类和伪元素的区别 伪类(Pseudo-classes) 伪元素(Pseudo-elements) 伪类和伪元素的区别 1 属性选择器 ☞ 属性选…

揭秘《庆余年算法番外篇》:范闲如何使用维吉尼亚密码解密二皇子密信

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

网络安全之安全协议浅谈

安全协议 安全协议概述安全协议分类IPSecIPSec安全协议IPSec架构IPSec封装模式AH协议ESP协议SET协议SET协议电子交易模型SET协议安全目标认证中心CA 安全协议概述 安全协议是信息交换安全的核心,它在网络不同层次上、针对不同应用,通过对各种密码学技术…

群晖安装青龙脚本

青龙定时任务管理面板,支持 Python3、JavaScript、Shell、Typescript 这几种环境,通过它可以方便的管理和运行定时任务(在某个时间执行一段代码),并且只需简单的配置,就可以在各个平台收到任务执行的结果通…

[SCTF2019]babyre

打开看看还是有花指令 解除后首先pass1是解maze,好像又是三维的 x是25,也就是向下跳五层,注意是立体的 得到 passwd1: ddwwxxssxaxwwaasasyywwdd 接着往下看 有一个加密函数IDA逆向常用宏定义_lodword-CSDN博客 unsigned __int64 __fastca…

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

题目: 题解: func hasPathSum(root *TreeNode, sum int) bool {if root nil {return false}if root.Left nil && root.Right nil {return sum root.Val}return hasPathSum(root.Left, sum - root.Val) || hasPathSum(root.Right, sum - roo…

文件编码格式查看和转换

1、查看文件编码格式 记事本:打开文件后,点击“文件”--“另存为”,可查看文件的编码格式。**Notepad**:打开文件后,即可在右下角查看文件的编码格式。vim:打开文件后,输入“:set fileencoding…

【Vue】computed 和 methods 的区别

概述 在使用时,computed 当做属性使用,而 methods 则当做方法调用computed 可以具有 getter 和 setter,因此可以赋值,而 methods 不行computed 无法接收多个参数,而 methods 可以computed 具有缓存,而 met…

题解:CF1016E Rest In The Shades

题意 平面上有一个点光源 s s s 并以每秒 1 1 1 单位长度的速度从点 ( a , s y ) (a,sy) (a,sy) 移动到点 ( b , s y ) (b,sy) (b,sy)&#xff0c;其中 s y < 0 sy<0 sy<0&#xff1b;在 x x x 轴正方向上有 n n n 不相交、不接触的挡板&#xff0c;第 i i i …

【DevOps】深入了解RabbitMQ:AMQP协议基础、消息队列工作原理和应用场景

目录 一、核心功能 二、优势 三、核心概念 四、工作原理 五、交换机类型 六、消息确认 七、持久性和可靠性 八、插件和扩展 九、集群和镜像队列 十、客户端库 十一、管理界面 十二、应用场景 RabbitMQ是一个基于AMQP协议的消息队列中间件&#xff0c;提供高可用、可…

vue3 table 按住鼠标左键范围框选v2(选择逻辑优化,框选有值颜色不变,清空框选样式不变)

<template>{{ tabaleData }}<Params /><el-row><el-col :span"6"><el-button type"primary" click"loadData">导入样本表</el-button></el-col><el-col :span"2"><el-button type…

Qt for android 获取USB设备列表(一)Java方式 获取

简介 QtActivity 作为 Qt 应用程序的入口点&#xff0c;负责启动和配置 Qt 应用程序的信息&#xff0c; 后面我们继承 QtActivity 做自定义控制&#xff0c;了解一下 Activity 生命周期概念&#xff0c; 因为 QtActivity 继承自Android的activity&#xff0c;使用周期函数完成我…

YOLOv10详细解读 | 一文带你深入了解yolov10的创新点(附网络结构图 + 举例说明)

前言 Hello大家好&#xff0c;我是Snu77&#xff0c;继YOLOv9发布时间没有多久&#xff0c;YOLOv10就紧接着发布于2024.5.23号&#xff08;不得不感叹YOLO系列的发展速度&#xff0c;但要纠正大家的观点就是不是最新的就一定最好&#xff09;&#xff01; 本文给大家带来的是…

Memcached 应该如何使用?

在【宝塔下应该用 Memcached 还是 Redis&#xff1f;】一文里&#xff0c;明月已经说过对于我们网站服务器来说 Memcached 才是首选&#xff0c;因为 Redis 虽然跟 Memcached 类似但更偏向于集群服务器&#xff0c;对于我们普通的站点服务器来说&#xff0c;也就是用了 Redis 大…

基于 BERT 对 IMDB 电影评论进行情感分类

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记…