Python 第三方模块 数据分析 Pandas模块 字符串处理
一.大小写转换
1.转换全部字母:
将所有字母转换为小写:<Ss>.lower()
将所有字母转换为大写:<Ss>.upper()#参数说明:Ss:指定pandas.core.strings.StringMethods object,可通过<S>.str得到#实例:
>>> s=pd.Series(["ASjkdS","dKDsd","jksdAA"])
>>> s.str.lower()
0 asjkds
1 dkdsd
2 jksdaa
dtype: object
>>> s.str.upper()
0 ASJKDS
1 DKDSD
2 JKSDAA
dtype: object
2.转换单词首字母:
按标题的格式转换:<Ss>.title()#即所有单词(通过空格分割)的首字母均大写,其他字母均为小写#实例:
>>> s=pd.Series(["ASjkdS asASk","dKDsd JDj","jksdAA sJSDK"])
>>> s.str.title()
0 Asjkds Asask
1 Dkdsd Jdj
2 Jksdaa Sjsdk
dtype: object
3.转换首字母:
将字符串的首字母转换为大写:<Ss>.capitalize()#实例:接上
>>> s.str.capitalize()
0 Asjkds asask
1 Dkdsd jdj
2 Jksdaa sjsdk
dtype: object
4.互相转换:
是字母的大小写互相转换:<Ss>.swapcase()#即小写字母转换为大写,大写字母转换为小写#实例:接上
>>> s.str.swapcase()
0 asJKDs ASasK
1 DkdSD jdJ
2 JKSDaa Sjsdk
dtype: object
二.拼接与分割
1.拼接:
拼接字符串:<Ss>.cat([others=None,sep=None,na_rep=None])#参数说明:others:为None表示将<Ss>中的内容拼接起来为Series/Index/DataFrame/np.ndarray/list-like表示将<Ss>与others(其中的元素只能为str)的对应元素拼接起来sep:指定连接符;为str#连接符被放在用于拼接的2个子字符串之间na_rep:如果有缺失值,则将缺失值替换为na_rep后再拼接;为str#如果为None,则拼接出来是NaN#实例:
>>> s=pd.Series(["ASj23的sk看到了ASk","dKJDj","jk32s1dAA"])
>>> s.str.cat()
'ASj23的sk看到了ASkdKJDjjk32s1dAA'
>>> s2=pd.Series(["111","222","333"])
>>> s.str.cat(others=s2,sep="|")
0 ASj23的sk看到了ASk|111
1 dKJDj|222
2 jk32s1dAA|333
dtype: object
>>> s3=pd.Series(["aaa","bbb",None])
>>> s.str.cat(others=s3,sep="|")
0 ASj23的sk看到了ASk|aaa
1 dKJDj|bbb
2 NaN
dtype: object
>>> s.str.cat(others=s3,sep="|",na_rep="???")
0 ASj23的sk看到了ASk|aaa
1 dKJDj|bbb
2 jk32s1dAA|???
dtype: object
2.使用分隔符分割:
使用分隔符从左侧开始分割:<Ss>.split([pat=" ",maxsplit=-1,expand=False])
使用分隔符从右侧开始分割:<Ss>.rsplit([sep=" ",maxsplit=-1,expand=False])#分隔符本身不包含在分割结果中
使用分隔符从左侧开始分割1次:<Ss>.partition([sep=" ",expand=True])
使用分隔符从右侧开始分割1次:<Ss>.rpartition([sep=" ",expand=True])#分割为3部分:分割符前,分割符,分割符后
查看分割出的各个值出现的次数:<Ss>.get_dummies([sep="|"])#分割规则同<Ss>.split(),且会完全分割#参数说明:pat/sep:指定分隔符;为str,默认为空格/"|"#也可以为位置参数maxsplit:指定最大分割次数;为int,默认为-1(表示直到分割完毕)expand:为True表示将结果展开为DataFrame/MultiINdex object为False表示直接返回Series/Index object#实例:
>>> s=pd.Series(["stasaaskjksad","ssasd","sa aad"])
>>> s.str.split()
0 [stasaaskjksad]
1 [ssasd]
2 [sa, aad]
dtype: object
>>> s.str.split(pat="a")
0 [st, s, , skjks, d]
1 [ss, sd]
2 [s, , , d]
dtype: object
>>> s.str.split(pat="a",expand=True)0 1 2 3 4
0 st s skjks d
1 ss sd None None None
2 s d None
>>> s.str.partition()0 1 2
0 stasaaskjksad
1 ssasd
2 sa aad
>>> s.str.partition(sep="a",expand=False)
0 (st, a, saaskjksad)
1 (ss, a, sd)
2 (s, a, aad)
dtype: object
>>> s.str.get_dummies("a")d s sd skjks ss st
0 0 1 1 0 1 0 1
1 0 0 0 1 0 1 0
2 1 1 1 0 0 0 0
三.增
1.填充:
在两侧填充指定字符到指定长度:<Ss>.center(width=None[,fillchar=" "])#优先在右侧填充
在右侧填充指定字符到指定长度:<Ss>.ljust(width=None[,fillchar=" "])
在左侧填充指定字符到指定长度:<Ss>.rjust(width=None[,fillchar=" "])
在左侧填充"0"到指定长度:<Ss>.zfill(width=None)
在指定位置填充指定字符到指定长度:<Ss>.pad(width=None[,side="left",fillchar=" "])#参数说明:width:指定填充后的字符串长度;为int#如果原字符串已经达到或超过该长度,则不变fillchar:指定用于填充的字符;为str,默认为空格side:指定填充位置;可为"left"(默认值)/"right"/"both"#为"both"时优先在右侧填充#实例:
>>> s=pd.Series(["aa","aaa","aa aa"])
>>> s.str.center(width=4,fillchar="*")
0 *aa*
1 aaa*
2 aa aa
dtype: object
>>> s.str.pad(width=4,fillchar="*",side="both")
0 *aa*
1 aaa*
2 aa aa
dtype: object
>>> s.str.zfill(width=6)
0 0000aa
1 000aaa
2 0aa aa
dtype: object
2.插入:
在字符间插入指定字符:<Ss>.join(sep=None)#参数说明:sep:指定要插入的字符;为str#实例:
>>> s=pd.Series(["aaa","bb"])
>>> s.str.join(sep=" ")
0 a a a
1 b b
dtype: object
3.扩展:
将<Ss>扩展为指定倍:<Ss>.repeat(repeats=None)#会将<Ss>中的每1行都复制为repeats份#参数说明:repeats:指定倍数;为int/int list#实例:
>>> s=pd.Series(["aaa","bb"])
>>> s.str.repeat(repeats=3)
0 aaaaaaaaa
1 bbbbbb
dtype: object
>>> s.str.repeat(repeats=[2,1])
0 aaaaaa
1 bb
dtype: object
四.内容判断与查找
1.是否包含:
判断是否包含指定字符串:<Ss>.contains(pat=None[,case=True,flag=0,na=np.nan,regex=True])#参数说明:pat:指定字符串;为str(支持正则表达式)#也可为位置参数case:是否区分大小写;为boolflag:指定传递到re模块的参数(用于正则表达式)na:用于填充缺失值的值;默认为np.nan(即保持不变)regex:是否允许在pat中使用正则表达式;为bool#实例:
>>> s=pd.Series(["abcd","dcba","3wsdw",None,math.nan])
>>> s.str.contains("a")
0 True
1 True
2 False
3 None
4 NaN
dtype: object
>>> s.str.contains("^a",na=None)
0 True
1 False
2 False
3 None
4 NaN
dtype: object
2.起始/结束:
判断是否以指定字符串开始:<Ss>.match(pat=None[,case=True,flag=0,na=np.nan])
判断是否以指定字符串结束:<Ss>.endswith(pat=None[,na=np.nan])#实例:接上
>>> s.str.match("a")
0 True
1 False
2 False
3 None
4 NaN
dtype: object
>>> s.str.endswith("a")
0 False
1 True
2 False
3 None
4 NaN
dtype: object
3.字符类型:
是否均为字母/数字/汉字:<Ss>.isalnum()
是否均为字母/汉字:<Ss>.isalpha()
是否均为数字:<Ss>.isdigit()#支持特殊格式的阿拉伯数字,如①;但不支持中文
是否均为空白字符:<Ss>.isspace()
是否不包含大写字母且包含小写字母:<Ss>.islower()
是否不包含小写字母且包含大写字母:<Ss>.isupper()
是否符合标题格式:<Ss>.istitle()#单词首字母为大写,其他字母均为小写
是否均为数字:<Ss>.isnumeric()#支持中文及特殊格式的阿拉伯数字
是否均为数字:<Ss>.isdecimal()#仅支持普通格式的阿拉伯数字,如1#实例:
>>> s=pd.Series(["1获得sdd","大奖78"," ","ADCJK","SSDs","sad","Ads Jss","As DA","1①","31","一"])
>>> pd.DataFrame([s.str.isalnum(),s.str.isalpha(),s.str.isdigit(),s.str.isnumeric(),s.str.isdecimal(),s.str.isspace(),s.str.islower(),s.str.isupper(),s.str.istitle()])0 1 2 3 4 5 6 7 8 9 10
0 True True False True True True False False True True True
1 False False False True True True False False False False True
2 False False False False False False False False True True False
3 False False False False False False False False True True True
4 False False False False False False False False False True False
5 False False True False False False False False False False False
6 True False False False False True False False False False False
7 False False False True False False False False False False False
8 False False False False False False True False False False False
4.查找指定内容:
查找并返回第1次匹配到的内容:<Ss>.extract(pat=None[,flags=0,expand=True])
查找并返回匹配到的所有内容:<Ss>.extractall(pat=None[,flags=0])#返回匹配到的所有内容构成的DataFrame object
查找并返回匹配到的所有内容:<Ss>.findall(pat=None)#返回Series对象,其中的元素为list#参数说明:flags参数同 (1) 部分pat:指定要查找的内容;为str(支持正则表达式)#也可为位置参数expand:为True表示返回DataFrame object为False表示返回Series/Index/DataFrame object#实例:
>>> s=pd.Series(['aSd','asd','dfd fsAsf sfs'])
>>> s.str.extract('([a-z]+)',expand=True)0
0 a
1 asd
2 dfd
>>> s.str.extract('([a-z]+)',expand=False)
0 a
1 asd
2 dfd
dtype: object
>>> type(s.str.extract('([a-z]+)'))
<class 'pandas.core.frame.DataFrame'>
>>> type(s.str.extract('([a-z]+)',expand=False))
<class 'pandas.core.series.Series'>
>>> s.str.extractall('([a-z]+)')0match
0 0 a1 d
1 0 asd
2 0 dfd1 fs2 sf3 sfs
>>> s.str.findall('([a-z]+)')
0 [a, d]
1 [asd]
2 [dfd, fs, sf, sfs]
dtype: object
5.检索指定内容的位置:
从左往右检索指定内容在<Ss>中的位置:<Ss>.find(sub=None[])
从右往左检索指定内容在<Ss>中的位置:<Ss>.rfind()#均返回sub在<Ss>中首次出现的起始位置(最左侧)的索引;如没有检索到,均返回-1
从左往右检索指定内容在<Ss>中的位置:<Ss>.index()
从右往左检索指定内容在<Ss>中的位置:<Ss>.rindex()#均返回sub在<Ss>中首次出现的起始位置(最左侧)的索引;如没有检索到,均报错#参数说明:sub:指定要检索的内容;为str(支持正则表达式)#也可为位置参数start,stop:指定检索的起始/结束位置的索引;为int#实例:
>>> s=pd.Series(["111aaaaffaaa","aaa2aa"])
>>>> s.str.find("aaa")
0 3
1 0
dtype: int64
>>> s.str.rfind("aaa")
0 9
1 0
dtype: int64
>>> s.str.find("ddd")
0 -1
1 -1
dtype: int64
>>> s.str.find("aa",start=4)
0 4
1 4
dtype: int64
>>> s.str.index("ddd")
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\strings.py", line 2001, in wrapperreturn func(self, *args, **kwargs)File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\strings.py", line 3242, in indexresult = str_index(self._parent, sub, start=start, end=end, side="left")File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\strings.py", line 1447, in str_indexreturn _na_map(f, arr, dtype=np.dtype("int64"))File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\strings.py", line 130, in _na_mapreturn _map_object(f, arr, na_mask=True, na_value=na_result, dtype=dtype)File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\strings.py", line 215, in _map_objectresult = lib.map_infer_mask(arr, f, mask.view(np.uint8), convert)File "pandas\_libs\lib.pyx", line 2361, in pandas._libs.lib.map_infer_maskFile "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\strings.py", line 1443, in <lambda>f = lambda x: getattr(x, method)(sub, start)
ValueError: substring not found
6.查找指定位置的内容:
查找指定位置的内容:<Ss>.get(i=None)
查找指定范围的内容:<Ss>.slice([start=0,stop=n,step=1])#均返回Series对象#参数说明:i:指定位置的索引;为int#也可为位置参数start,stop,step:分别指定截取的起始位置/结束位置/步长;为int,默认为0/n/1#n仅表示截取<Ss>直到结尾,但实际使用时不能直接写n;均可为位置参数#实例:
>>> s=pd.Series(["s的3健d 34地方","ddf的耳34的d"])
>>> s.str.get(i=3)
0 健
1 的
dtype: object
>>> s.str.slice(1,7,2)
0 的健s
1 d的3
dtype: object
五.删改
1.换行:
使单词单独成行:<Ss>.wrap(width=None[,expand_tabs=True,replace_whitespace=True,drop_whitespace=True,break_long_words=True,break_on_hyphens=True])#即在单词结尾处插入"\n"#参数说明:width:指定每行的最大长度;为int#也可为位置参数expand_tabs:是否将制表符扩展为(4个)空格;为boolreplace_whitespace:是否用空格替换所有空白;为booldrop_whitespace:是否忽略空白(空格,制表符,换行符等);为bool#即是否将空白视为1个单词break_long_words:是否分解长度超过width的单词(通过空白分隔);为bool#为True时,超过width的单词会被分解;为False时不会break_on_hyphens:是否在连字符后换行;为bool#实例:接上
>>> s.str.wrap(1)
0 a\na
1 a\na\na
2 a\na\na\na
dtype: object
>>> s.str.wrap(width=2)
0 aa
1 aa\na
2 aa\naa
dtype: object
>>> s=pd.Series(["aa ss"])
>>> s.str.wrap(width=2,expand_tabs=False,drop_whitespace=False)
0 aa\n \nss
dtype: object
>>> s.str.wrap(width=2,drop_whitespace=False)
0 aa\n \n \n \nss
dtype: object
>>> s.str.wrap(1)
0 a\na\ns\ns
dtype: object
>>> s.str.wrap(1,break_long_words=False)
0 aa\nss
dtype: object
>>> s=pd.Series(["aa ss sasajkjkajkj"])
>>> s.str.wrap(width=6,break_long_words=False)
0 aa\nss\nsasajkjkajkj
dtype: object
>>> s.str.wrap(width=7,break_long_words=False)
0 aa ss\nsasajkjkajkj
dtype: object
2.去除边缘处的字符:
删除两侧的指定字符:<Ss>.strip([to_strip=" "])
删除右侧的指定字符:<Ss>.rstrip([to_strip=" "])
删除左侧的指定字符:<Ss>.lstrip([to_strip=" "])#参数说明:to_strip:指定要删除的字符;为str,默认为空格#也可为位置参数#实例:
>>> s=pd.Series([" sta","ss","sa "],index=["a","b","c"])
>>> print(s)
a sta
b ss
c sa
dtype: object
>>> s2=s.str.strip()
>>> print(s2)
a sta
b ss
c sa
dtype: object
3.修改:
修改指定内容:<Ss>.replace(pat=None,repl=None[,n=-1,case=None,flags=0])
修改指定字符:<Ss>.translate(table=None)#参数说明:pat:指定要替换的内容;为str(支持正则表达式)/编译了的正则表达式#也可为位置参数repl:指定要替换成的内容;为str/functionn:指定最大替换次数;为int,默认为-1(替换所有)case:是否区分大小写;为bool,若pat为str则默认为True#若pat为编译了的正则表达式(参见 python.正则表达式re模块.四 部分的re.compile())则不能设置flags:指定要传递给re模块的参数#若pat为编译了的正则表达式则不能设置table:指定如何更新字符;为dict,格式为{<ord>:<sub>}(key为ASCII码,value为str/ASCII码/None)#虽然key/value都可以是ASCII码,但替换的/替换为的均是相应的char而非int#实例:
>>> s=pd.Series(["aaab3sdsB42","asb3234da","aaabds"])
>>> s.str.replace("b[0-9]*","qqq")
0 aaaqqqsdsB42
1 asqqqda
2 aaaqqqds
dtype: object
>>> s.str.replace("b[0-9]*","qqq",case=False)
0 aaaqqqsdsqqq
1 asqqqda
2 aaaqqqds
dtype: object
>>> s.str.translate(table={ord("a"):"d",ord("s"):ord("3"),ord("2"):None})
0 dddb33d3B4
1 d3b334dd
2 dddbd3
dtype: object
4.修改指定位置处的内容:
更新指定位置处的内容:<Ss>.slice_replace(start=None,stop=None,repl=None)#参数说明:start/stop同 4.(6) 部分;repl同 (3) 部分#实例:接上
>>> s.str.slice_replace(2,4,"www")
0 aawww3sdsB42
1 aswww234da
2 aawwwds
dtype: object
六.其他
1.统计:
统计字符串长度:<Ss>.len()
统计指定字符串出现的次数:<Ss>.count(pat=None[,flags=0])#参数说明:同 4.(1) 部分的<Ss>.contains(#实例:
>>> s=pd.Series(["asaaasdaa","saadaadsAa"])
>>> s.str.len()
0 9
1 10
dtype: int64
>>> s.str.count(pat="aa")
0 2#也就是说,在字符串的某部分被匹配上后,不会再用于之后的匹配
1 2
dtype: int64
>>> s=pd.Series(["asaaaasdaa","saadaadsAa"])
>>> s.str.count(pat="aa")
0 3
1 2
dtype: int64
2.编/解码:
编码为字节对象:<Ss>.encode(encoding=None[,error="static"])
解码为字符串:<Ss>.decode(encoding=None[,error="static"])
返回字符串的Unicode标准格式:<Ss>.normalize(form=None)#参数说明:encoding:指定编码方式;为str#也可为位置参数error:指定出现错误时如何处理;可取值见下为"static"(默认值)表示抛出异常为"ignore"表示忽略非法字符为"replace"表示使用?替代非法字符为"xmlcharrefreplace"表示通过XML的字符引用表示非法字符为"backslashreplace"表示用Python的反向转义序列表示非法字符form:指定规范化Unicode的标准;可为"NFC"/"NFKC"/"NFD"/"NFKD"#实例:
>>> s=pd.Series(["我是JACK","阿斯顿发"])
>>> s.str.encode("utf-8")
0 b'\xe6\x88\x91\xe6\x98\xafJACK'
1 b'\xe9\x98\xbf\xe6\x96\xaf\xe9\xa1\xbf\xe5\x8f...
dtype: object
>>> s.str.encode("ascii","ignore")
0 b'JACK'
1 b''
dtype: object
>>> s.str.encode("ascii","replace")
0 b'??JACK'
1 b'????'
dtype: object
>>> s.str.encode("ascii","xmlcharrefreplace")
0 b'我是JACK'
1 b'阿斯顿发'
dtype: object
>>> s.str.encode("ascii","backslashreplace")
0 b'\\u6211\\u662fJACK'
1 b'\\u963f\\u65af\\u987f\\u53d1'
dtype: object
>>> s.str.normalize("NFC")
0 我是JACK
1 阿斯顿发
dtype: object
>>> s=pd.Series([b"asdfghjkl",b"qwertyuiop",b"zxcvbnm"])
>>> s.str.decode("ascii")
0 asdfghjkl
1 qwertyuiop
2 zxcvbnm
dtype: object
Python 第三方模块 数据分析 Pandas模块 字符串处理相关推荐
- python 数据分析模块_Python数据分析pandas模块用法实例详解
本文实例讲述了Python数据分析pandas模块用法.分享给大家供大家参考,具体如下: pandas pandas10分钟入门,可以查看官网:10 minutes to pandas 也可以查看更复 ...
- Python开发案例,pandas模块使用,实现预测NBA比赛结果
主要思路 (1)数据选取 获取数据的链接为: https://www.basketball-reference.com/ 获取的数据内容为: 每支队伍平均每场比赛的表现统计: 每支队伍的对手平均每场比 ...
- python怎么安装pandas模块-python如何导入安装pandas模块并使用别名
Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持. Pandas的名称来自于面板数据(panel data)和python数据分析(data anal ...
- Python模块之Pandas模块学习笔记
目录 一.模块的安装 二.数据结构 1. DataFrame的创建 2. DataFrame索引的修改 3. DataFrame数据信息查看 三.文件的读取和写入 1. 读取 2. 写入 四. 数据的 ...
- [转载] python中的numpy模块和pandas模块的区别_numpy 模块和 pandas 模块
参考链接: Python中的numpy.radians和deg2rad 一.numpy模块 1.1 numpy 简介 numpy是python的一种开源的数值计算扩展库,这种库可用来存储和处理大型nu ...
- python炒股模块_Python数据分析-numpy模块、pandas模块.基本操作、股票案例
索引操作和列表同理 arr = np.random.randint(0,100,size=(5,6)) arr array([[14, 89, 71, 96, 1, 94], [30, 98, 10, ...
- python中的numpy模块和pandas模块的区别_python的numpy模块- 01.pandas基本数据类型
01.pandas基本数据类型 import pandas as pd import numpy as np from pandas import Series,DataFrame 1. Series ...
- python - 第三方库下载itchat模块
API(应用程序编程接口) API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组 ...
- python读取dat数据anaconda_基于python的大数据分析-pandas数据读取(代码实战)
我们常见的数据存储格式无非就是csv.excel.txt以及数据库等形式. 数据读取 在pandas中可以使用一些函数完成数据的读取.比如read_csv.read_excel.read_table. ...
最新文章
- 一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
- 手机应用:非功能需求 Check List
- Flutter开发Flutter与原生OC、Java的交互通信-1(47)
- iOS开发-plist文件增删改查
- 9月22日 奇怪的贸易
- 【Matlab 图像】边缘检测算法及效果演示
- bat 批处理获取时间语法格式
- 基于svm图像分类C语言,基于SVM的图像分类算法与实现.PDF
- HTTP请求的GET与POST方式的区别
- Stack与queue的底层实现、区别。
- Three Memory Management Models
- xna中的截屏操作处理
- 写了一套优雅接口之后,领导让我给大家讲讲这背后的技术原理
- Angular服务器端渲染
- Unity HTC Vive手柄汉诺塔操作
- 15分钟破解保险箱!美国小哥200美元自制开锁机器人
- 深度森林DF21、deep forest、gcForest
- 两分钟内教会你如何给视频加配音,快速掌握配音技巧!
- php获取文件夹下所有文件名(php遍历目录)
- 基于Redis实现查找附近的人