原数据

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. C++ //继承同名静态成员处理方式

    1 //继承同名静态成员处理方式 2 #include <iostream> 3 #include <string> 4 using namespace std; 5 6 cl ...

  2. 还有更惨的吗?字节面经,美团,网易,招银,360全部在HR前一面挂了

    最近一朋友向我吐槽去年的秋招,字节面经,美团,网易,招银,360全部在HR前一面挂了,实在是有点惨.我把他语无伦次的话做了一个整理: 最近真的很暴躁,控制不住自己陷入情绪低落胡思乱想,每天都是在希望失 ...

  3. 【LeetCode】155. 最小栈

    155. 最小栈 知识点:栈:单调 题目描述 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删 ...

  4. @Value(value="${***.***}")配置文件赋值给static静态变量

    public static String topicName; @Value("${activemq.topicName}") public void setTopicName(S ...

  5. Modify File Descriptor Limit on Linux

    System-wide File Descriptor Limit Get current value: sysctl fs.file-max modify max fd limit: sysctl ...

  6. MySQL数据类型 储存引擎

    存储引擎 日常生活中文件格式有很多种,并且针对不同的文件格式会有对应不同存储方式和处理机制(txt,pdf,word,mp4...) 针对不同的数据应该对应着不同的处理机制来存储 存储引擎就是不同的处 ...

  7. NOIP 模拟 $24\; \rm block$

    题解 \(by\;zj\varphi\) 因为它要求大于它的且放在它前的数的个数要小于它的 \(key\) 值,所以先按 \(\rm val\) 值排序,然后按 \(\rm key\) 值排序,按顺序 ...

  8. 3、二进制安装K8s之部署kube-apiserver

    二进制安装K8s之部署kube-apiserver 一.生成 kube-apiserver 证书 1.自签证书颁发机构(CA) cat > ca-config.json <<EOF ...

  9. C# 线程安全的集合

    参考网址: https://docs.microsoft.com/en-us/dotnet/standard/collections/thread-safe/ Thread-Safe Collecti ...

  10. 多线程同步AutoResetEvent 和ManualResetEvent