python库--pandas--Series.str--字符串处理
原数据
import pandas as pd
a = pd.Series(['aSd', 'asd', 'dfd fsAsf sfs'])
b = pd.Series([None, 'asd', 'fgh'])
index | a | b |
---|---|---|
0 | aSd | None |
1 | asd | asd |
2 | dfd fsAsf sfs | fgh |
字符大小写转换
a.str.lower()
a.str.upper()
a.str.title()
a.str.capitalize()
a.str.swapcase()
lower | upper | title | capitalize | swapcase | |
---|---|---|---|---|---|
0 | asd | ASD | Asd | Asd | AsD |
1 | asd | ASD | Asd | Asd | ASD |
2 | dfd fsasf sfs | DFD FSASF SFS | Dfd Fsasf Sfs | Dfd fsasf sfs | DFD FSaSF SFS |
字符串拼接
自身拼接
a.str.cat(sep=',')
aSd,asd,dfd fsAsf sfs
与其它series拼接
a.str.cat(a)
a.str.cat(['aSd', 'asd', 'dfd fsAsf sfs'])
a + a
index | value |
---|---|
0 | aSdaSd |
1 | asdasd |
2 | dfd fsAsf sfsdfd fsAsf sfs |
a.str.cat(a, sep=',')
a.str.cat(['aSd', 'asd', 'dfd fsAsf sfs'], sep=',')
a + ',' + a
index | value |
---|---|
0 | aSd,aSd |
1 | asd,asd |
2 | dfd fsAsf sfs,dfd fsAsf sfs |
数据含有None/NaN的情况
b.str.cat(sep=',')
asd,fgh
# 将NaN替换为指定字符串进行操作
a.str.cat(sep=',', na_rep='???')
???,asd,fgh
- 剩下的情况除将NaN替换为指定字符之外跟上述示例一样, 这里不再进行演示
字符填充/插入/扩展
# 向两端填充指定字符到指定长度
a.str.center(width=10, fillchar='?')
a.str.pad(width=10, side='both', fillchar='?')
# 在右侧填充指定字符到指定长度
a.str.ljust(width=10, fillchar='?')
a.str.pad(width=10, side='right', fillchar='?')
# 在右侧填充指定字符到指定长度
a.str.rjust(width=10, fillchar='?')
a.str.pad(width=10, side='left', fillchar='?')
center | ljust | rjust | |
---|---|---|---|
0 | ???aSd???? | aSd??????? | ???????aSd |
1 | ???asd???? | asd??????? | ???????asd |
2 | dfd fsAsf sfs | dfd fsAsf sfs | dfd fsAsf sfs |
# 每隔指定个字符插入一个换行符
a.str.wrap(width=2)
# 在字符串前面填充0到指定长度
a.str.zfill(width=10)
# 将字符串扩展n倍
a.str.repeat(repeats=2)
# 为每一个元素指定扩展倍数
a.str.repeat(repeats=[2, 2, 2])
wrap | zfill | repeat | |
---|---|---|---|
0 | aS\nd | 0000000aSd | aSdaSd |
1 | as\nd | 0000000asd | asdasd |
2 | df\nd \nfs\nAs\nf \nsf\ns | dfd fsAsf sfs | dfd fsAsf sfsdfd fsAsf sfs |
- join() 在字符间插入字符
a.str.join(sep='?')
# 等同于
a.map(lambda x: '?'.join(x))
- 因此也出现了一种特殊情况, 元素不是字符串但可以使用join方法
- 经过不完全证明, '?'.join() 中支持的参数作为Series的元素是都可使用此方法
pd.Series([['1', '2', '3']]).join('?')
字符串内容判断
以下方法返回由True和False组成的Series
- contains(): 判断指定字符串或正则表达式是否在序列或索引中
参数 | 说明 |
---|---|
pat | 字符串或正则表达式 |
case=True | 是否区分大小写 |
flags=0 | 可传入re.IGNORECASE之类的参数 |
na=nan | 缺失值填充 |
regex=True | 是否使用正则表达式匹配 |
- endswith(): 判断是否以给定的字符串结尾
参数 | 说明 |
---|---|
pat | 字符串 |
na=nan | 缺失值填充 |
- match(): 判断是否以给定的字符串开头(支持正则)
参数 | 说明 |
---|---|
pat | 字符串或正则表达式 |
case=True | 是否区分大小写 |
flags=0 | 可传入re.IGNORECASE之类的参数 |
na=nan | 缺失值填充 |
as_indexer=None | 弃用 |
方法 | 说明 |
---|---|
.isalnum() | 字符串至少包含一个字符且所有字符都是字母(汉字)或数字则返回True |
.isalpha() | 字符串至少包含一个字符且所有字符都是字母(汉字)则返回True |
.isdigit() | 只包含数字(可以是: Unicode, 全角字符, bytes(b'1'), 罗马数字) |
.isspace() | 只包含空白符 |
.islower() | 至少包含一个小写字符, 且不包含大写字符 |
.isupper() | 至少包含一个大写字符, 且不包含小写字符 |
.istitle() | 所有单词大写开头其余小写(标题化) |
.isnumeric() | 只包含数字字符 |
.isdecimal() | 只包含数字(Unicode字符, 全角字符) |
查找
- extract(): 使用正则表达式提取需要的内容(只返回第一次匹配到的内容)
- extractall(): 使用正则表达式提取需要的内容(返回所有匹配到的内容
参数 | 说明 |
---|---|
pat | 正则表达式(必须含有捕获组, 超过一个必然返回DataFrame) 若捕获组设有name则将作为返回的列标签 |
flags=0 | 可传入re.IGNORECASE之类的参数 |
expand=None | True: 返回DataFrame(未来版本默认值) False: 返回S/I/DataFrame(现在版本默认值) extractall() 方法无此参数 |
a.str.extract('([A-Z]+)')
a.str.extract('([A-Z]+)(s*)')
([A-Z]+) | - | ([A-Z]+)(s*) | |
---|---|---|---|
0 | S | - | S |
1 | NaN | - | NaN NaN |
2 | A | - | A s |
a.str.extractall('(?P<field1>[sSdf]+)(?P<field2>[ds])')
field1 | field2 | 说明 | ||
---|---|---|---|---|
match | ||||
0 | 0 | S | d | 第1行第1个匹配结果 |
1 | 0 | s | d | 第2行第1个匹配结果 |
2 | 0 | df | d | 第3行第1个匹配结果 |
1 | f | s | 第3行第2个匹配结果 | |
2 | sf | s | 第3行第3个匹配结果 |
- 检索sub在字符串中的位置, 可以指的那个开始检索和结束检索的位置
- find(): 检索不到返回-1
- rfind(): 从右往左检索, 检索不到返回-1
- index(): 检索不到触发异常
- rindex(): 从右往左检索, 检索不到返回-1
a.str.find(sub='s')
# 从第6个字符开始查找到第10个字符结束查找
a.str.find(sub='s', start=6, end=10)
(sub='s') | (sub='s', start=6, end=10) | |
---|---|---|
0 | -1 | -1 |
1 | 1 | -1 |
2 | 5 | 7 |
- findall(): 以列表形式返回正则表达式所有匹配结果
a.str.findall(pat='[sSdf]+')
a.map(lambda x: re.findall('[sSdf]+', x))
结果 | |
---|---|
0 | [Sd] |
1 | [sd] |
2 | [dfd, fs, sf, sfs] |
- get(): 获取指定位置的字符
a.str.get(i=1)
结果 | |
---|---|
0 | S |
1 | s |
2 | f |
统计
- count() 统计指定字符串(支持正则)在序列字符串中出现的次数
- len() 返回序列字符串的长度
a.str.count(pat='s', flags=0)
a.str.len()
count | len | |
---|---|---|
0 | 0 | 3 |
1 | 1 | 3 |
2 | 4 | 13 |
转码
- encode(): 编码str --> bytes
- decode(): 解码bytes --> str
参数 | 说明 |
---|---|
encoding | 编码方式 |
error='static' | static: 编码/解码失败抛出异常 |
ignore: 编码/解码失败自动忽略非法字符
replace: 编码/解码失败则使用 ? 替代非法字符
xmlcharrefreplace: 则引用XML的字符.
c = pd.Series(['中文', '\ud83easd'])
c.str.encode('utf8', 'ignore')
c.str.encode('utf8', 'replace')
c.str.encode('utf8', 'xmlcharrefreplace')
ignore | replace | xmlcharrefreplace | backslashreplace | |
---|---|---|---|---|
1 | b'asd' | b'?asd' | b'�asd' | b'\ud83easd' |
# 中国: b'\xe4\xb8\xad\xe6\x96\x87'
d = pd.Series([b'\xe4\xb8\xad\xe6\x96'])
d.str.decode('utf8', 'ignore')
ignore | replace | xmlcharrefreplace | backslashreplace | |
---|---|---|---|---|
1 | 中 | 中� | NaN | 中\xe6\x96 |
- normalize(): 返回字符串的Unicode标准格式
删减/截取
- strip(to_strip=None): 删除两侧指定字符, 默认删除空白符
- lstrip(to_strip=None): 删除左侧指定字符, 默认删除空白符
- rstrip(to_strip=None): 删除右侧指定字符, 默认删除空白符
- slice() 截取子字符串
参数 | 说明 |
---|---|
start=None | 开始位置 |
stop=None | 结束位置 |
step=None | 步长 |
分割/替换
- split() 使用指定字符分割字符串, 支持正则
- rsplit() 从右侧开始分割
参数 | 说明 |
---|---|
pat=None | 分隔符, 默认空白符 |
n=-1 | 分割次数, 默认全部 |
expand=False | True: 返回DataFrame/MultiINdex False: 返回Series/Index |
- get_dummies(): 对字符串分割, 并返回每个分割结果出现的次数
>>> pd.Series(['a|b', 'a', 'a|c']).str.get_dummies()
a b c
0 1 1 0
1 1 0 0
2 1 0 1
>>> pd.Series(['a|b', np.nan, 'a|c']).str.get_dummies()
a b c
0 1 1 0
1 0 0 0
2 1 0 1
- partition(pat='', expand=True): 第一次出现pat时将字符串分割为三个部分: pat前面的部分, pat本身, pat后面的部分
- rpartition(): 从右往左检测pat字符串
更新字符串
- replace(): 更新字符串
参数 | 说明 |
---|---|
pat | 字符串或编译的正则表达式 |
repl | str: 将匹配到的字符串替换为此字符串 fun: 传给fun的是对象相当于re.search(pat, string)的返回值 |
n=-1 | 替换的次数, 默认全部 |
case=None | 是否区分大小写, 如果pat为字符串则默认为True, 若为编译的正则表达式则不能设置 |
flags=0 | 可传入re.IGNORECASE之类的参数, 但若pat为编译的正则表达式则不能设置 |
- slice_replace(): 将选中的部分替换为指定字符串
参数 | 说明 |
---|---|
start=None | 开始位置 |
stop=None | 结束位置 |
repl=None | 要替换为的字符串 |
- translate(): 字符替换
- dict: {ord('a'): 'x'} 或 {ord('a'): ord('x')} key必须是ascii码, value可以是字符串或ASCII码
- str.maketrans('a','x') 等同于 {97: 120}
python库--pandas--Series.str--字符串处理的更多相关文章
- Series.str——字符串批量处理方法
针对dataframe中的某一行(或列)想做批量字符串处理时,可采用此方法 series.str.python内置的str方法 例如: series.str.replace('A','B') # ...
- Python基础类型(二) str 字符串
字符串str ' ' 字符串+ 都是字符串的时候才能相加 a = 'alex' b = 'wusir' print(a+b) #字符串拼接 字符串* 字符串和数字相乘 a = 6 b = 'alex' ...
- 【pandas】pandas.Series.str.split()---字符串分割
原创博文,转载请注明出处! 本文代码的github地址 series中的元素均为字符串时,通过str.split可将字符串按指定的分隔符拆分成若干列的形式. 例子: 拆分以逗号为分隔符的字 ...
- python库pandas简介
pandas是基于numpy的数据分析模块,提供了大量标准模型和高效操作大型数据集所需要的工具. pandas主要提供了3种数据结构:1.Series,带标签的一维数组:2.DataFrame,带标签 ...
- python库pandas
由于在机器学习中经常以矩阵的方式来表现数据,那么我们就需要一种数据结构来存储和处理矩阵.pandas库就是这样一个工具. 本文档是一个学习笔记,记录一些常用的命令,原文:http://www.cnbl ...
- Python库-Pandas
Pandas是基于NumPy的一种数据分析工具,提供了大量使我们快速便捷处理数据的函数和方法. 中文官网地址:https://www.pypandas.cn Pandas基于两种数据类型:Series ...
- Pandas——Series and DataFrane
数据科学--pandas库 pandas中有两个主要的数据结构,一个是Series,另一个是DataFrame.通过这两类数据,可以下载数据.可视化数据.和分析数据. Pandas安装:pip ins ...
- 顶级Python库
绝不能错过的24个顶级Python库 Python有以下三个特点: · 易用性和灵活性 · 全行业高接受度:Python无疑是业界最流行的数据科学语言 · 用于数据科学的Python库的数量优势 事实 ...
- Python 数据处理库 pandas 入门教程
Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...
- 【Python自动化Excel】Python与pandas字符串操作
Python之所以能够成为流行的数据分析语言,有一部分原因在于其简洁易用的字符串处理能力. Python的字符串对象封装了很多开箱即用的内置方法,处理单个字符串时十分方便:对于Excel.csv等表格 ...
随机推荐
- MySQL 创建高性能索引
索引是存储引擎用于快速找到记录的一种数据结构.除了加速查找,索引在其他方面也有一些有用的属性.索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较 ...
- Springboot通过拦截器拦截请求信息收集到日志
1.需求 最近在工作中遇到的一个需求,将请求中的客户端类型.操作系统类型.ip.port.请求方式.URI以及请求参数值收集到日志中,网上找资料说用拦截器拦截所有请求然后收集信息,于是就开始了操作: ...
- 爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战
前言 "小步快跑.快速迭代"的开发大环境下,"一套代码.多端运行"是很多开发团队的梦想,美团也一样.他们做了很多跨平台开发框架的尝试:React Native. ...
- SSM集成FastJson
FastJson Json数据格式回顾 什么是json JSON:(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript( ...
- 【笔记】初探KNN算法(3)
KNN算法(3) 测试算法的目的就是为了帮助我们选择一个更好的模型 训练数据集,测试数据集方面 一般来说,我们训练得到的模型直接在真实的环境中使用 这就导致了一些问题 如果模型很差,未经改进就应用在现 ...
- 页面模型 PageModel
Razor页面中的程序处理方法 OnGet 和 OnGetAsync是同样的处理程序,因此不能共存,否则会报错. 视图数据 ViewData 视图数据是从页面模型向内容页面传递数据的容器.视图数据是以 ...
- DVWA(三):SQL injection 全等级SQL注入
(本文不定期更新) 一.所需环境: 1.DVWA 2.web环境 phpstudy/wamp 3.burp suite 二.SQL注入产生的原因: 程序员在编写代码的时候,没有对用户输入数据的合法性进 ...
- S3C2440—4.时钟系统
文章目录 一.S3C2440时钟体系介绍 1.总线与时钟 2.时钟来源 3.选择时钟 4.产生时钟 5.流程 二.如何配置时钟源 1.设置FCLK频率寄存器 MPLLCON 2.设置分频HDIV.PD ...
- S3C2440—3.用点亮LED来熟悉裸机开发的详细流程
文章目录 一.硬件知识 1.LED原理图 2.芯片手册 Ⅰ.找LED原理图 Ⅱ.找对应引脚 Ⅲ.在芯片手册中查找引脚信息 Ⅳ.查看寄存器说明 Ⅴ.配置寄存器 二.S3C2440框架与启动过程 三.要用 ...
- redis中使用SCAN代替KEYS
前言 由于redis的keys命令是线上禁用,所以就有了SCAN.SSCAN.HSCAN和ZSCAN四个命令. 但是这四个命令也不是每次返回全部匹配结果,因此需要一遍遍执行下去,而且每次返回的curs ...