原数据

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在字符串中的位置, 可以指的那个开始检索和结束检索的位置

    1. find(): 检索不到返回-1
    2. rfind(): 从右往左检索, 检索不到返回-1
    3. index(): 检索不到触发异常
    4. 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'&#55358;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(): 字符替换

    1. dict: {ord('a'): 'x'} 或 {ord('a'): ord('x')} key必须是ascii码, value可以是字符串或ASCII码
    2. str.maketrans('a','x') 等同于 {97: 120}

python库--pandas--Series.str--字符串处理的更多相关文章

  1. Series.str——字符串批量处理方法

    针对dataframe中的某一行(或列)想做批量字符串处理时,可采用此方法 series.str.python内置的str方法 例如: series.str.replace('A','B')   # ...

  2. Python基础类型(二) str 字符串

    字符串str ' ' 字符串+ 都是字符串的时候才能相加 a = 'alex' b = 'wusir' print(a+b) #字符串拼接 字符串* 字符串和数字相乘 a = 6 b = 'alex' ...

  3. 【pandas】pandas.Series.str.split()---字符串分割

    原创博文,转载请注明出处! 本文代码的github地址       series中的元素均为字符串时,通过str.split可将字符串按指定的分隔符拆分成若干列的形式. 例子: 拆分以逗号为分隔符的字 ...

  4. python库pandas简介

    pandas是基于numpy的数据分析模块,提供了大量标准模型和高效操作大型数据集所需要的工具. pandas主要提供了3种数据结构:1.Series,带标签的一维数组:2.DataFrame,带标签 ...

  5. python库pandas

    由于在机器学习中经常以矩阵的方式来表现数据,那么我们就需要一种数据结构来存储和处理矩阵.pandas库就是这样一个工具. 本文档是一个学习笔记,记录一些常用的命令,原文:http://www.cnbl ...

  6. Python库-Pandas

    Pandas是基于NumPy的一种数据分析工具,提供了大量使我们快速便捷处理数据的函数和方法. 中文官网地址:https://www.pypandas.cn Pandas基于两种数据类型:Series ...

  7. Pandas——Series and DataFrane

    数据科学--pandas库 pandas中有两个主要的数据结构,一个是Series,另一个是DataFrame.通过这两类数据,可以下载数据.可视化数据.和分析数据. Pandas安装:pip ins ...

  8. 顶级Python库

    绝不能错过的24个顶级Python库 Python有以下三个特点: · 易用性和灵活性 · 全行业高接受度:Python无疑是业界最流行的数据科学语言 · 用于数据科学的Python库的数量优势 事实 ...

  9. Python 数据处理库 pandas 入门教程

    Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...

  10. 【Python自动化Excel】Python与pandas字符串操作

    Python之所以能够成为流行的数据分析语言,有一部分原因在于其简洁易用的字符串处理能力. Python的字符串对象封装了很多开箱即用的内置方法,处理单个字符串时十分方便:对于Excel.csv等表格 ...

随机推荐

  1. MySQL 创建高性能索引

    索引是存储引擎用于快速找到记录的一种数据结构.除了加速查找,索引在其他方面也有一些有用的属性.索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较 ...

  2. Springboot通过拦截器拦截请求信息收集到日志

    1.需求 最近在工作中遇到的一个需求,将请求中的客户端类型.操作系统类型.ip.port.请求方式.URI以及请求参数值收集到日志中,网上找资料说用拦截器拦截所有请求然后收集信息,于是就开始了操作: ...

  3. 爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战

    前言 "小步快跑.快速迭代"的开发大环境下,"一套代码.多端运行"是很多开发团队的梦想,美团也一样.他们做了很多跨平台开发框架的尝试:React Native. ...

  4. SSM集成FastJson

    FastJson Json数据格式回顾 什么是json JSON:(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript( ...

  5. 【笔记】初探KNN算法(3)

    KNN算法(3) 测试算法的目的就是为了帮助我们选择一个更好的模型 训练数据集,测试数据集方面 一般来说,我们训练得到的模型直接在真实的环境中使用 这就导致了一些问题 如果模型很差,未经改进就应用在现 ...

  6. 页面模型 PageModel

    Razor页面中的程序处理方法 OnGet 和 OnGetAsync是同样的处理程序,因此不能共存,否则会报错. 视图数据 ViewData 视图数据是从页面模型向内容页面传递数据的容器.视图数据是以 ...

  7. DVWA(三):SQL injection 全等级SQL注入

    (本文不定期更新) 一.所需环境: 1.DVWA 2.web环境 phpstudy/wamp 3.burp suite 二.SQL注入产生的原因: 程序员在编写代码的时候,没有对用户输入数据的合法性进 ...

  8. S3C2440—4.时钟系统

    文章目录 一.S3C2440时钟体系介绍 1.总线与时钟 2.时钟来源 3.选择时钟 4.产生时钟 5.流程 二.如何配置时钟源 1.设置FCLK频率寄存器 MPLLCON 2.设置分频HDIV.PD ...

  9. S3C2440—3.用点亮LED来熟悉裸机开发的详细流程

    文章目录 一.硬件知识 1.LED原理图 2.芯片手册 Ⅰ.找LED原理图 Ⅱ.找对应引脚 Ⅲ.在芯片手册中查找引脚信息 Ⅳ.查看寄存器说明 Ⅴ.配置寄存器 二.S3C2440框架与启动过程 三.要用 ...

  10. redis中使用SCAN代替KEYS

    前言 由于redis的keys命令是线上禁用,所以就有了SCAN.SSCAN.HSCAN和ZSCAN四个命令. 但是这四个命令也不是每次返回全部匹配结果,因此需要一遍遍执行下去,而且每次返回的curs ...