Datawhale-Pandas中文教程[9]
文本数据
文本数据类型处理–>pandas==1.0.0
,其具有str
对象的设计和string
类型的引入两块内容。
本章知识点:str
对象性质、正则表达式、文本处理五类操作、常用字符串函数
标准库的str模块
标准库str
的内置函数可以分为以下4类:
对字符串不做修改
判断isalpha
startwith
: 判断字符串是否以指定前缀开头
endwith
: …指定后缀结尾…
isalnum
: 判断是否是alpha+num格式[a-z][A-Z][0-9]
'fsj23289'.isalnum() # -> True
'fsj23@289'.isalnum() # -> False
isalpha
: 判断是否是纯字母[a-z][A-Z]
isdigit
: 判断数字格式[0-9]
islower
: 判断小写字母格式[a-z]
isupper
: 判断大写字母格式
istitle
: 判断首字母是否大写[A-Z][a-z]?+(分隔符可以是空格问号加号)
isspace
: 判断是否均为空格\s+
' \t \n \v'.isspace() # -> True
isascii
: 判断是否是ascii码
isdecimal
isidentifier
isnumeric
isprintable
str.contains()
查找find
和计数count
count
: 返回字符串中出现子串的次数
find
: 返回第一个匹配的子串的坐标,不存在字串时返回-1
index
: 返回第一个匹配的子串的坐标,不存在子串时报错ValueError
rfind
: 从右边匹配第一个子串的坐标,不存在子串时返回-1
rindex
对原字符串修改
大小写
lower
: 出现特殊字符的时候可以使用casefold
upper
capitalize
: 将所有单词首字母大写
title
: 第一个字母大写
swapcase
: 反转大小写
填充ljust
ljust
: 使用指定字符,将字符串向右填充到指定长度,如果字符串已经有这么长则不填充,只能填充一个字符。
rjust
: 使用指定字符,将字符串向左填充到指定长度;zfill
: 在字符串左侧补零到指定长度
center
: 使用指定字符,将字符串向两侧填充到指定长度
剥离strip
strip
: 移除两侧的空格,如果指定chars
,移除chars
内的字符
lstrip
: 移除左侧的空格
rstrip
: 移除右侧的空格
下面这个例子没搞懂
'abcabcThisaaaaaaaa'.strip('abc') # -> 'This'
'abcabcThisaaaaaaaa'.lstrip('abc') # -> 'Thisaaaaaaaa'
'abcabcThisaaaaaaaa'.rstrip('abc') # -> 'abcabcThis'
替换和格式化format
replace
: 将匹配的子串替换成新的指定字符串S.replace(old, new, count=-1)
S.expandtabs(tabsize=8)
: 将tab
字符(也就是\t
)转换成空格,相当于S.replace('\t', ' ')
translate
&maketrans
: 将匹配的子串替换成新的指定字符串
tab = str.maketrans('abcde', '12345')
'The match was abandoned because of bad weather'.translate(tab)
# -> 'Th5 m1t3h w1s 121n4on54 2531us5 of 214 w51th5r'
format
: 将{}
括起来的字符串替换为指定参数,format_map
功能类似
map = {'a': 'not', 'b': 'my', 'who': 'jason'}
'this is {a} {b} string. it belongs to {who}.'.format_map(map)
# -> 'this is not my string. it belongs to jason.'
切分和合并
split(sep=None, maxsplit=-1)
: 默认使用空格分割,maxsplit
指定最大分组个数,rsplit
具有类似的用法,只是其默认从右边往左分割
S.join(<iterable>)
: 指定连接符将一个可迭代对象合并成一个字符串,返回一个数组
'^-^'.join(['this', 'is', 'not', 'my', 'string']
# -> 'this^-^is^-^not^-^my^-^string'
str.cat()
splitlines
: 将字符串按照换行符分割,返回一个数组S.splitlines(keepends=False)
'this is not my string\n second line'.splitlines()
['this is not my string', ' second line']
S.partition(sep)
和rpartition
: 将字符串按照指定字符分割成两半,返回一个元组
'this is not my string'.partition(' ')
('this', ' ', 'is not my string')
编码转换encode
In : '你好'.encode('gbk')
Out: b'\xc4\xe3\xba\xc3'In : '你好'.encode('utf-8')
Out: b'\xe4\xbd\xa0\xe5\xa5\xbd'
待补充pd中的str相关函数和方法
pandas中的文本数据
str对象的设计
str
对象是定义在Index
或Series
上的属性,能对文本序列进行快速处理。
对一个序列进行文本处理,首先需要获取其str
对象,pandas
中的用法类似于python中的str
模块
s = pd.Series(['abc', 'efg', 'hi'])
s.str
s.str.upper()
str
对象方法一共有50个,其中有31个和标准库中的str
模块中的方法同名且功能一致,同时在索引或切片方式上,它俩也具有高度相似性。
s.str[0]
s.str[-1: 0: -2]
s.str[2] # 第三个元素越界缺失
# 超出范围则返回缺失值
string类型
pandas从1.0.0开始引入了string
类型,引入动机在于:原来所有字符串类型都会以object
类型的Series
进行存储,但object
类型适用于存储混合类型,也就是同时存储不同的数据类型。字符串有必要拥有自己的数据存储类型。
尽量保证每一个序列中的值都是字符串,这种情况下再使用str
对象。但是这是非必须的,如果对一个非字符串的对象进行索引或切片,string
类型的str
对象和object
类型的str
对象的返回结果可能是不同的。
s = pd.Series([{1: 'temp_1', 2: 'temp_2'}, ['a', 'b'], 0.5, 'my_string'])
s.str[0] # ->
0 None
1 a
2 NaN
3 m
dtype: object
s.astype('string').str[0] # ->
0 {
1 [
2 0
3 m
dtype: string
当序列类型为object
时,其对每一个元素进行[]
索引,因此对于第一个的字典而言,返回temp_1
字符串;对第二个的列表而言,返回第二个值;对于第三个的不可迭代对象返回缺失值;对于第四个的字符串而言进行[]
索引返回字符串的第二位字母y
。
string
类型的str
对象先把整个元素转为字面意义的字符串,再进行字符串的[]
索引
两者的另一个差别在于,string
类型是Nullable
类型,但object
不是。这意味着 string 类型的序列,如果调用的 str 方法返回值为整数 Series 和布尔 Series 时,其分别对应的 dtype 是 Int 和 boolean 的 Nullable 类型,而 object 类型则会分别返回 int/float 和 bool/object ,取决于缺失值的存在与否。同时,字符串的比较操作,也具有相似的特性, string 返回 Nullable 类型,但 object 不会
s = pd.Series(['a'])
s.str.len()
s.astype('string').str.len()
s == 'a'
s.astype('string') == 'a'
s = pd.Series(['a', np.nan]) # 带有缺失值
s.str.len()
s.astype('string').str.len()
s == 'a'
s.astype('string') == 'a'
练一练
a = pd.Series([1,2],[4,5])
a.str[::-1] # -> 报错
a.astype('string').str[::-1] # -> 子列表中的元素被翻转了
这个例子说明对于全体元素为数值类型的序列,无论其序列为什么类型,也不允许直接使用str
对象,如果需要把数值类型当场string
类型处理,可以使用astype()
强制转换
正则表达式基础
参阅正则表达式必知必会
可以利用re
模块的findall()
函数来匹配所有出现过且不重叠的文本模式,其第一个参数为正则表达式,第二个参数为待匹配的字符串
# 从下面的字符串中找出Apple
reg, string = "Apple", "Apple! This Is an Apple!"
import re
re.findall(reg, string)
# 注意捕获模式不会重叠捕获
元字符
元字符是正则表达式中的特殊字符,它可以被大致分为4类:集合元字符、频次元字符、逻辑元字符和位置元字符
待补充
分组捕获与反向引用
待补充
零宽断言
Datawhale-Pandas中文教程[9]相关推荐
- Pandas中文教程
导航 索引 模块 | 下一个 | pandas 0.19.2 documentation» 目录 新功能 安装 为pandas贡献 常见问题(FAQ) 套装概述 10分钟入门pandas 教程 食谱 ...
- Pandas基本教程
Pandas 是 Python 的核心数据分析支持库,提供了快速.灵活.明确的数据结构,旨在简单.直观地处理关系型.标记型数据.Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工 ...
- Python-EEG工具库MNE中文教程(14)-Epoch对象中的元数据(metadata)
目录 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:903290195 本案例演示使用Epochs元数据.关于Epochs数据结构:可以查看文章Python-EEG工具库MN ...
- 2019b官方手册中文版_数据科学|「最全」实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南...
文章须知 文章作者:机器之心 责任编辑:书生 审核编辑:阿春 微信编辑:玖蓁 本文转载自公众号 机器之心 (ID:almosthuman2014) 原文链接:「最全」实至名归,NumPy 官方早有中文 ...
- Angularjs中文教程
Angularjs中文教程 http://docs.ngnice.com/guide posted on 2015-05-11 09:36 资江河畔 阅读(...) 评论(...) 编辑 收藏 转载于 ...
- 全网首发 | 第一个opencv_contrib扩展模块中文教程限时领取
点击上方"小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 OpenCV是学习计算机视觉的重要工具之一,然而多年以来,在深度学习的deBuff下,Ope ...
- 【好资源】全网第一份,OpenCV 4-Contrib扩展模块中文教程
今天给大家分享一个优质的计算机视觉学习资源,帮助大家在使用OpenCV的道路上越走越远,目前资源已被翻译作者开源,提供了pdf版方便大家学习.此外,作者会实时维护资料的完整性. 重点说明:这份资源极有 ...
- Swift中文教程(五)--对象和类
原文:Swift中文教程(五)--对象和类 Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文 ...
- ArcGIS_系列中文教程下载
ArcGIS_系列中文教程 如链接有问题请在留言中说明ArcGIS9中文版系列丛书PDF(原书一 ...
- 苹果Swift语言中文教程资源汇总
苹果swift语言中文教程(零)搭配环境以及代码运行成功http://vjiazhi.com/kaifa/1014.html 苹果Swift语言中文教程(一)基础数据类型 http://vjiazhi ...
最新文章
- 【Android】Android程序自己主动更新
- python list()函数 (从可迭代对象返回初始化的新列表)
- 机器人学习--路径规划算法
- php写入rabbit速度,RabbitMQ 入门教程(PHP) 实现延迟功能
- ngx.location.capture 只支持相对路径,不能用绝对路径
- SQL Server删除重复行的6个方法
- win软件推荐:ACDSee Photo Studio Ultimate 2022(图片编辑器)
- jQuery UI 拖动(Draggable) - 还原位置
- 智能公交监控调度系统技术方案,等车不再等到心碎
- Spring boot mqtt客户端
- GBK 与GB2312 互查 区位码
- 学习笔记|JSP教程|菜鸟教程
- 怎么安装paraview_ParaViewWeb基于本地服务的环境部署
- 大师级思考者是怎么探索事物本质的?
- MSSQL父子关系表的SQL查询(SQL Query for Parent Child Relationship)
- 【Python】杂记
- ubuntu修改u盘权限_ubuntu系统下向U盘拷贝数据提示目标是只读的
- C++ 调用7z进行解压缩,并返回解压缩进度和异常信息
- 王者服务器维护公告2月,王者荣耀2月22日体验服停机更新公告 英雄调整
- #RunJS# 最少代码的瀑布流实现