pandas中对文本类型数据的处理小结


Posted in Python onNovember 01, 2021
目录

下面看下pandas中字符串类处理函数吧,内容如下所示:

1.英文字母大小写转换及填充

s = pd.Series(['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe'])
  • 大写转小写: s.str.lower()
  • 小写转大写:s.str.upper()
  • 转为新闻标题形式:s.str.title()
  • 首字母大写,其余小写:s.str.capitalize()
  • 将原来的大写和小写,分别转为小写和大写,即大小写互换:s.str.swapcase()
  • 将文字内容用某种字符填充到固定长度,会从两边进行填充:s.str.center(4,'*')
  • 将文字内容用某种字符填充到固定长度,可以设置填充方向(默认为left,可以设置为left,right,both):s.str.pad(width=10, side=‘right', fillchar='-')
  • 将文字内容用某种字符填充到固定长度,会从文字的右方进行填充,即原来的字符串在左边:s.str.ljust(4,'-')
  • 将文字内容用某种字符填充到固定长度,会从文字的左方进行填充,即原来的字符串在右边:s.str.rjust(4,'-')
  • 将文字内容用某种字符按照指定的方向(left,right,both)填充到固定长度: s.str.pad(3,side=‘left',fillchar='*')
  • 在字符串前添加0到指定长度:
  • s = pd.Series(['-1', ‘1', ‘1000', 10, np.nan])
  • s.str.zfill(3)

2.字符串合并与拆分

2.1 多列字符串合并

注意:多列字符串在合并时,推荐使用cat函数,该函数是按照索引进行合并的。

s=pd.DataFrame({'col1':['a', 'b', np.nan, 'd'],'col2':['A', 'B', 'C', 'D']})
# 1.有一个缺失值的行不进行合并
s['col1'].str.cat([s['col2']])
# 2.用固定字符(*)替换缺失值,并进行合并
s['col1'].str.cat([s['col2']],na_rep='*')
# 3.用固定字符(*)替换缺失值,并用分隔符(,)进行合并
s['col1'].str.cat([s['col2']],na_rep='*',sep=',')
# 4.索引不一致的合并
#创建series
s = pd.Series(['a', 'b', np.nan, 'd'])
t = pd.Series(['d', 'a', 'e', 'c'], index=[3, 0, 4, 2])
#合并
s.str.cat(t, join='left', na_rep='-')
s.str.cat(t, join='right', na_rep='-')
s.str.cat(t, join='outer', na_rep='-')
s.str.cat(t, join='inner', na_rep='-')

2.2 一列 列表形式的文本合并为一列

s = pd.Series([['lion', 'elephant', 'zebra'], [1.1, 2.2, 3.3], [
              'cat', np.nan, 'dog'], ['cow', 4.5, 'goat'], ['duck', ['swan', 'fish'], 'guppy']])
#以下划线进行拼接
s.str.join('_')

使用前:

pandas中对文本类型数据的处理小结

使用后:

pandas中对文本类型数据的处理小结

2.3 一列字符串与自身合并成为一列

s = pd.Series(['a', 'b', 'c'])
#指定数字
s.str.repeat(repeats=2)
#指定列表
s.str.repeat(repeats=[1, 2, 3])

使用该函数后,效果图分别如下:

pandas中对文本类型数据的处理小结
pandas中对文本类型数据的处理小结

2.4 一列字符串拆分为多列

2.4.1 partition函数

partition函数,会将某列字符串拆分为3列,其中2列为值,1列为分隔符。
有两个参数进行设置,分别为:sep(分隔符,默认为空格),expand(是否生成dataframe,默认为True)

s = pd.Series(['Linda van der Berg', 'George Pitt-Rivers'])
#默认写法,以空格分割,会以第一个分隔符进行拆分
s.str.partition()
#另一写法,会以最后一个分隔符进行拆分
s.str.rpartition()
#以固定符号作为分隔符
s.str.partition('-', expand=False)
#拆分索引
idx = pd.Index(['X 123', 'Y 999'])
idx.str.partition()

2.4.2 split函数

split函数会按照分隔符拆分为多个值。
参数:
pat(分隔符,默认为空格);
n(限制分隔的输出,即查找几个分隔符,默认-1,表示全部);
expend(是否生成dataframe,默认为False)。

s = pd.Series(["this is a regular sentence","https://docs.python.org/3/tutorial/index.html",np.nan])
#1.默认按照空格进行拆分
s.str.split()
#2.按照空格进行拆分,并限制2个分隔符的输出
s.str.split(n=2)
#3.以指定符号拆分,并生成新的dataframe
s.str.split(pat = "/",expend=True)
#4.使用正则表达式来进行拆分,并生成新的dataframe
s = pd.Series(["1+1=2"])
s.str.split(r"\+|=", expand=True)

2.4.3 rsplit函数

如果不设置n的值,rsplit和split效果是相同的。区别是,split是从开始进行限制,rsplit是从末尾进行限制。

s = pd.Series(["this is a regular sentence","https://docs.python.org/3/tutorial/index.html",np.nan])
#区别于split
s.str.rsplit(n=2)

3.字符串统计

 3.1 统计某列字符串中包含某个字符串的个数

s = pd.Series(['dog', '', 5,{'foo' : 'bar'},[2, 3, 5, 7],('one', 'two', 'three')])
s.str.len()

3.2 统计字符串长度

s = pd.Series(['dog', '', 5,{'foo' : 'bar'},[2, 3, 5, 7],('one', 'two', 'three')])
s.str.len()

效果图如下:

pandas中对文本类型数据的处理小结

4.字符串内容查找(包含正则)

 4.1 extract

可通过正则表达式来提取指定内容,小括号内的会生成一列

s = pd.Series(['a1', 'b2', 'c3'])
#按照小括号内的进行提取,生成两列
s.str.extract(r'([ab])(\d)')
#加上问号后,如果有一个匹配不上,还可以继续匹配
s.str.extract(r'([ab])?(\d)')
#可以对生成的新列进行重命名
s.str.extract(r'(?P<letter>[ab])(?P<digit>\d)')
#生成1列
s.str.extract(r'[ab](\d)', expand=True)

4.2 extractall

区别于extract,该函数可以提取所有符合条件的元素

s = pd.Series(["a1a2", "b1", "c1"], index=["A", "B", "C"])
#提取所有符合条件的数字,结果为多重索引1列
s.str.extractall(r"[ab](\d)")
#提取符合条件的数字,并重命名,结果为多重索引1列
s.str.extractall(r"[ab](?P<digit>\d)")
#提取符合条件的a、b和数字,结果为多重索引多列
s.str.extractall(r"(?P<letter>[ab])(?P<digit>\d)")
#提取符合条件的a、b和数字,添加问号后,一个匹配不上可以继续向后匹配,结果为多重索引多列
s.str.extractall(r"(?P<letter>[ab])?(?P<digit>\d)")

4.3 find

查询固定字符串在目标字符串中的最小索引。
若需要查询的字符串未出现在目标字符串中,则显示为-1

s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.find('p')

显示结果如下:

pandas中对文本类型数据的处理小结

4.4 rfind

查询固定字符串在目标字符串中的最大索引。
若需要查询的字符串未出现在目标字符串中,则显示为-1。

s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.rfind('p',start=1)

查询结果如下:

pandas中对文本类型数据的处理小结

4.5 findall

查找系列/索引中所有出现的模式或正则表达式

s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.findall(r'[ac]')

显示结果如下:

pandas中对文本类型数据的处理小结

4.6 get

从列表、元组或字符串中的每个元素中提取元素的系列/索引。

s = pd.Series(["String",
               (1, 2, 3),
               ["a", "b", "c"],
               123,
               -456,
               {1: "Hello", "2": "World"}])
s.str.get(1)

效果如下图:

pandas中对文本类型数据的处理小结

4.7 match

确定每个字符串是否与参数中的正则表达式匹配。

s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.match('^[ap].*t')

匹配效果图如下:

pandas中对文本类型数据的处理小结

5.字符串逻辑判断

5.1 contains函数

测试模式或正则表达式是否包含在系列或索引的字符串中。
参数:
pat,字符串或正则表达式;
case,是否区分大小写,默认为True,即区分大小写;
flags,是否传递到re模块,默认为0;
na,对缺失值的处理方法,默认为nan;
regex,是否将pat参数当作正则表达式来处理,默认为True。

s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.contains('ap',case=True,na=False,regex=False)

效果图如下:

pandas中对文本类型数据的处理小结

5.2 endswith函数

测试每个字符串元素的结尾是否与字符串匹配。

s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.endswith('e')

匹配结果如下:

pandas中对文本类型数据的处理小结

处理nan值

s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.endswith('e',na=False)

效果如下:

pandas中对文本类型数据的处理小结

5.3 startswith函数

测试每个字符串元素的开头是否与字符串匹配。

s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.startswith('a',na=False)

匹配如下:

pandas中对文本类型数据的处理小结

5.4 isalnum函数

检查每个字符串中的所有字符是否都是字母数字。

s1 = pd.Series(['one', 'one1', '1', ''])
s1.str.isalnum()

效果如下:

pandas中对文本类型数据的处理小结

5.5 isalpha函数

检查每个字符串中的所有字符是否都是字母。

s1 = pd.Series(['one', 'one1', '1', ''])
s1.str.isalpha()

效果如下:

pandas中对文本类型数据的处理小结

5.6 isdecimal函数

检查每个字符串中的所有字符是否都是十进制的。

s1 = pd.Series(['one', 'one1', '1',''])
s1.str.isdecimal()

效果如下:

pandas中对文本类型数据的处理小结

5.7 isdigit函数

检查每个字符串中的所有字符是否都是数字。

s1 = pd.Series(['one', 'one1', '1',''])
s1.str.isdigit()

效果如下:

pandas中对文本类型数据的处理小结

5.8 islower函数

检查每个字符串中的所有字符是否都是小写。

s1 = pd.Series(['one', 'one1', '1',''])
s1.str.islower()

效果如下:

pandas中对文本类型数据的处理小结

5.9 isnumeric函数

检查每个字符串中的所有字符是否都是数字。

s1 = pd.Series(['one', 'one1', '1','','3.6'])
s1.str.isnumeric()

效果如下:

pandas中对文本类型数据的处理小结

5.10 isspace函数

检查每个字符串中的所有字符是否都是空格。

s1 = pd.Series([' one', '\t\r\n','1', '',' '])
s1.str.isspace()

效果如下:

pandas中对文本类型数据的处理小结

5.11 istitle函数

检查每个字符串中的所有字符是否都是标题形式的大小写。

s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', ''])
s1.str.istitle()

效果如下:

pandas中对文本类型数据的处理小结

5.12 isupper函数

检查每个字符串中的所有字符是否都是大写。

s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', ''])
s1.str.isupper()

效果如下:

pandas中对文本类型数据的处理小结

5.13 get_dummies函数

按 sep 拆分系列中的每个字符串并返回一个 虚拟/指标变量的dataframe。

s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', ''])
s1.str.get_dummies()

效果如下:

pandas中对文本类型数据的处理小结

该函数还可以进行此类匹配,注意输入的形式

s1=pd.Series(['a|b', np.nan, 'a|c'])
s1.str.get_dummies()

效果如下:

pandas中对文本类型数据的处理小结

6.其他

6.1 strip

删除前导和尾随字符。

s1 = pd.Series(['1. Ant.  ', '2. Bee!\n', '3. Cat?\t', np.nan])
s1.str.strip()

效果如下:

pandas中对文本类型数据的处理小结

6.2 lstrip

删除系列/索引中的前导字符。

6.3 rstrip

删除系列/索引中的尾随字符。

到此这篇关于pandas中对于文本类型数据的处理汇总的文章就介绍到这了,更多相关pandas文本类型数据处理内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
Python模块WSGI使用详解
Feb 02 Python
Python实现多条件筛选目标数据功能【测试可用】
Jun 13 Python
python2.7和NLTK安装详细教程
Sep 19 Python
python版大富翁源代码分享
Nov 19 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
python实现代码统计程序
Sep 19 Python
Numpy之reshape()使用详解
Dec 26 Python
Python 实现训练集、测试集随机划分
Jan 08 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
python解释器安装教程的方法步骤
Jul 02 Python
Python操作Elasticsearch处理timeout超时
Jul 17 Python
Python游戏开发实例之graphics实现AI五子棋
Python Django获取URL中的数据详解
Nov 01 #Python
python编程项目中线上问题排查与解决
Nov 01 #Python
python实现层次聚类的方法
Python list列表删除元素的4种方法
Nov 01 #Python
Python面向对象编程之类的概念
Nov 01 #Python
python代码实现扫码关注公众号登录的实战
You might like
php中json_decode()和json_encode()的使用方法
2012/06/04 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
2016/03/16 Javascript
JS 获取HTML标签内的子节点的方法
2016/09/21 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
Python操作MongoDB数据库的方法示例
2018/01/04 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
铭宣海淘转运:美国、日本、英国转运等全球转运公司
2019/09/10 全球购物
最新的互联网创业计划书
2014/01/10 职场文书
军训学生自我鉴定
2014/02/12 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
2014会计年终工作总结
2014/12/20 职场文书
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技