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实例分享:快速查找出被挂马的文件
Jun 08 Python
浅谈Python中copy()方法的使用
May 21 Python
Python操作Word批量生成文章的方法
Jul 28 Python
python 中random模块的常用方法总结
Jul 08 Python
python抽取指定url页面的title方法
May 11 Python
python远程连接服务器MySQL数据库
Jul 02 Python
python打开windows应用程序的实例
Jun 28 Python
解决Django加载静态资源失败的问题
Jul 28 Python
python 模拟银行转账功能过程详解
Aug 06 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
高考考python编程是真的吗
Jul 20 Python
python collections模块的使用
Oct 16 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程序员的13个好习惯小结
2012/02/20 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
php查询whois信息的方法
2015/06/08 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
JS版网站风格切换实例代码
2008/10/06 Javascript
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
python socket 超时设置 errno 10054
2014/07/01 Python
python实现每次处理一个字符的三种方法
2014/10/09 Python
对于Python中RawString的理解介绍
2016/07/07 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
Python检测网络延迟的代码
2018/05/15 Python
Python rstrip()方法实例详解
2018/11/11 Python
django query模块
2019/04/20 Python
python实现小球弹跳效果
2019/05/10 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
selenium如何定位span元素的实现
2021/01/13 Python
服装设计师职业生涯规划范文
2014/02/28 职场文书
高中生逃课检讨书
2014/10/10 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
销售2014年度工作总结
2014/12/08 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
新闻稿格式范文
2015/07/18 职场文书
田径运动会通讯稿
2015/07/18 职场文书
《观潮》教学反思
2016/02/17 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书