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输出当前目录下index.html文件路径的方法
Apr 28 Python
wxPython定时器wx.Timer简单应用实例
Jun 03 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
python画出三角形外接圆和内切圆的方法
Jan 25 Python
Python基于TCP实现会聊天的小机器人功能示例
Apr 09 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
Python中按值来获取指定的键
Mar 04 Python
基于Tensorflow高阶读写教程
Feb 10 Python
使用python3 实现插入数据到mysql
Mar 02 Python
对Keras中predict()方法和predict_classes()方法的区别说明
Jun 09 Python
python中slice参数过长的处理方法及实例
Dec 15 Python
python pygame入门教程
Jun 01 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语法速查表
2006/12/06 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
javascript 短路法代码精简
2009/08/20 Javascript
不安全的常用的js写法
2009/09/15 Javascript
Javascript中的相等与不等运算
2010/04/25 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
最好用的Bootstrap fileinput.js文件上传组件
2016/12/12 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
微信小程序实现选项卡效果
2018/11/06 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
TensorFlow实现Logistic回归
2018/09/07 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
医院护士求职自荐信格式
2013/09/21 职场文书
日语专业毕业生自荐信
2013/11/11 职场文书
求职信怎么写范文
2014/05/26 职场文书
写给老师的感谢信
2015/01/20 职场文书
齐云山导游词
2015/02/06 职场文书
高一军训感想
2015/08/07 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
ant design vue的form表单取值方法
2022/06/01 Vue.js