Python易混淆知识系列:Pandas字符串方法和字符串内建函数,使用Python的一个优势就是字符串处理起来比较容易。

Python的初学者在学习字符串内建函数的时候往往会很困惑:字符串的内建函数是对单个字符串对象处理,如果要对成千上万个字符串对象处理该怎么办?

不少已经使用Python工作很长时间的同学,即使已经学会使用Pandas对象的.apply()方法来处理字符串,依然会时常忘记:其实Pandas已经自带功能强大的向量化字符串操作。

即使知道Pandas字符串方法的同学,使用的时候也经常与字符串内建函数混淆。

而熟练使用Pandas字符串方法的同学往往会觉得,其方法的代码简洁性与运行效率都远高于其他的写法。真相到底如何?Pandas字符串方法和字符串内建函数有什么不同?运算效率真的像传闻那么高吗?

今天我们就好好捋一下这块Python易混淆的知识点。

1. 快速入门向量化字符串操作

初学Python字符串内建函数的同学肯定知道有个叫.lower()的方法可以将字符串中的大写英文字母转化为小写,比如将字符串对象’ABCD’转化为小写:

点击添加图片描述(最多60个字)编辑

如果字符型的Series对象中的字符串要转化为小写呢?比如:

点击添加图片描述(最多60个字)编辑

此时,我们就可以使用Series的str方法中的.lower()来处理:

点击添加图片描述(最多60个字)编辑

同理,如果要将Series对象中的所有的大写字母变成小写,可以使用.str.upper()。

看到这里,相信很多没有使用过Pandas字符串方法的同学会惊奇地发现,这跟字符串对象的内建函数差不多呀?只不过多了一个通过.str()方法调用函数的过程。

确实,大多数Pandas的字符串方法借鉴了Python字符串内建函数的内容,这里给大家梳理一下,两种处理字符串方法基本相同的地方:

· 求字符串长度

§ .str.len()

· 字符检索

§ .str.find()和.str.rfind()

§ .str.index()和.str.rindex()

· 字符转换

§ .str.lower()和.str.upper()

§ .str.title()和.str.capitalize()

§ .str.swapcase()

· 字符类型判断

§ .str.islower()和.str.isupper()

§ .str.isnumeric()、.str.isalnum()、.str.isdecimal()、.str.isalpha()、.str.isdigit()

§ .str.isspace()

§ .str.istitle()

· 字符对齐与填充

§ .str.startswith()和.str.endswith()

§ .str.center()

§ .str.ljust()和.str.rjust()

· 字符分隔

§ .str.split()和.str.rsplit()

§ .str.partition()和.str.rpartition()

· 字符整理

§ .str.strip()、.str.rstrip()、.str.lstrip()

以上方法都是Pandas字符串方法与Python字符串内建函数中基本一致的部分,无论是方法名还是调用过程,只有少部分有少许区别。

2. 其他字符串方法

除了与字符串内建函数类似的方法以外,Pandas还有一些功能强大的字符串方法。

(1) 向量化字符串的取值和切片操作

很多同学会很疑惑,字符串对象可以进行取值和切片操作,但是Pandas对象中的字符串如何进行相同的操作?比如以上面的Series对象为例:

点击添加图片描述(最多60个字)编辑

如果想把上面Series对象中所有字符串中的前三个字母取出来,可以通过调用.str属性后,返回的对象直接使用和字符串切片一样的方法:

点击添加图片描述(最多60个字)编辑

此外还可以使用.str.slice()方法,其参数与切片方法的类似:

点击添加图片描述(最多60个字)编辑

但是如果想根据字符串索引来取单个字符元素,可以通过.str.get()方法来进行。比如上面的Series对象a中,我们想要取里面所有字符串索引值为1的元素,可以写a.str.get(1):

点击添加图片描述(最多60个字)编辑

(2) 字符串拼接

Python中多个字符串对象拼接非常简单,直接使用加法运算符就可以了,比如:

点击添加图片描述(最多60个字)编辑

这种便捷的方法,Series对象也同样沿用下来,可以将多个字符型Series对象用加法运算符直接相加:

点击添加图片描述(最多60个字)编辑

但是Pandas字符串方法中有更加强大的字符串拼接功能,那就是.str.cat()方法。

实现上面同样的字符串拼接,如果我们使用.str.cat()方法,可以这样写:

点击添加图片描述(最多60个字)编辑

也就是说,第一个Series对象调用.str.cat()方法,该方法第一个参数可以用列表的形式来把其他需要合并的Series对象写进来。

当然,.str.cat()方法功能强大,比如可以选择使用参数sep来自定义分隔符来合并,我们使用“|”来连接上面的三个Series对象:

点击添加图片描述(最多60个字)编辑

(3) 字符替换操作

字符串内建函数有便捷的字符替换方法.replace(),比如我们想字符串’abcd’中的’a’替换成’A’:

点击添加图片描述(最多60个字)编辑

同样地,Pandas字符串方法也有一样的操作:

点击添加图片描述(最多60个字)编辑

当然,如果想通过索引值或者切片来指定替换呢?比如我们想将str_01中的所有字符串中索引值0到2的元素替换成符号‘*’,我们就需要使用.str.slice_replace(),替换对象以参数repl来指定:

点击添加图片描述(最多60个字)编辑

(4) 快速独热编码

独热编码无论在特征工程中还是问卷数据处理中都应用广泛,我们需要转码的字符如下图表示,该怎么办?

点击添加图片描述(最多60个字)编辑

想看到这,熟练使用Pandas的apply()方法的同学会开始绞尽脑汁写自定义函数来完成这么复杂的编码规则。其实,我们可以直接使用Pandas字符串方法.str.get_dummies()来完成独热编码,如下:

点击添加图片描述(最多60个字)编辑

如果非常不幸,我们的字符串中的分隔符”|”都不存在,该怎么办?

点击添加图片描述(最多60个字)编辑

此时我们可以使用搭配使用.str.join()方法,将“|”插入到上面Series对象中每个字符串对象的每个元素之间:

点击添加图片描述(最多60个字)编辑

上面生成的对象最后再次调用.str.get_dummies()方法即可:

点击添加图片描述(最多60个字)编辑

3. 代码量与运算效率PK

从上面我们可以看到,Pandas的字符串方法实现了很多我们意想不到的操作的同时,大大简化了代码书写的复杂程度。

接下来,我们对比一下,在文本数据量较大的时候,使用Pandas字符串方法和使用字符串内建函数,在代码量上和代码运算效率上作一番比较。

我们以最为常用的几个使用场景来举例子,分别是字符切片、替换、拼接、去除前后特殊字符。

下面用到的内存分析魔法函数,需要先在pip安装扩展memory_profiler:

pip install memory_profiler

然后还需要在notebook中导入这个扩展:

%load_ext memory_profiler

(1) 字符串切片方法对比

我们先建立一个长度为一千万的字符型Series对象:

点击添加图片描述(最多60个字)编辑

我们尝试使用两种方法,对Series对象中的所有字符对象取前两个元素:

点击添加图片描述(最多60个字)编辑

上面我们会发现第一种方法使用列表推导式配合字符串切片方法,会比第二种使用Pandas字符串方法占用内存要大且运算时间稍慢。

同时,Pandas字符串方法的代码简洁很多。

(5) 字符串替换方法对比

同理按照以上的方法,我们对比一下两种字符串方法的在字符串替换上的运算效率:

点击添加图片描述(最多60个字)编辑

上图可以看到,无论是代码简洁性、可阅读性,还是运算效率方面,Pandas的字符串方法都要好很多。

(6) 字符串拼接方法对比

多个字符型Series对象拼接在一起,同时使用分隔符“|”拼接,我们对比一下两种写法:

点击添加图片描述(最多60个字)编辑

可以看到在拼接方法上,虽然代码的简洁性与拓展性,Pandas的字符串方法要好很多,但是其运算效率要比第一种方法要低很多。

这主要是因为第一种方法使用了广播机制,加快了运算效率。

(7) 去除前后特殊字符

去除字符串前后的特殊字符,比如空格,是字符串处理的常见操作,我们看看使用Pandas的.str.strip()方法是否在各方面要好很多。

先建一个例子:

点击添加图片描述(最多60个字)编辑

第一种方法我们依然使用列表推导式与字符串内建函数:

点击添加图片描述(最多60个字)编辑

第二种方法:

点击添加图片描述(最多60个字)编辑

第二种方法我们会看到,虽然运算时间稍微比第一种方法高了一点,但是代码简洁性和可阅读性要比第一种方法好很多,而且运算内存消耗要低很多。

4. 小结

从上面这么多的例子我们会发现,Pandas的字符串方法无论是在代码可阅读性还是运算效率方面,在实现各种字符串处理场景时,基本上都要比其他方法要好很多。而在实现特定字符串处理场景,比如独热编码时,Pandas特有的字符串方法就更加便捷。

作为实用主义者,我们在处理文本数据的时候,可以优先使用Pandas字符串方法。遇到尤为棘手的处理需求时,结合字符串内建函数与Pandas的apply(),你就可以建立一个功能强大无比的字符串处理程序来清洗自己数据了。

python字符串处理方法与函数有什么区别_傻傻分不清系列 | Python中各种字符串处理方法...相关推荐

  1. python Series 添加行_傻傻分不清系列 | Python中各种字符串处理方法

    Python易混淆知识系列:Pandas字符串方法和字符串内建函数,使用Python的一个优势就是字符串处理起来比较容易. Python的初学者在学习字符串内建函数的时候往往会很困惑:字符串的内建函数 ...

  2. 方法和函数有什么区别?

    有人可以在OOP上下文中提供方法与功能的简单说明吗? #1楼 对我来说:如果我同意:方法的功能和函数的功能是相同的: 一个函数可能返回一个值 可能期望参数 就像任何一段代码一样,您可能要放入对象,结果 ...

  3. python turtle 绘图速度用函数会快吗_有趣的Python turtle绘图

    专 题 Feature Story 16 \ China Science & Technology Education 文 _ 毛京宇/北京师范大学第三附属中学 魏云靖/北京市师达中学 有趣的 ...

  4. python excel 数据匹配_VLOOKUP函数将一个excel表格的数据匹配到另一个表中

    将一个excel表中的数据匹配到另一个表中,需要用到VLOOKUP函数.简单介绍一下VLOOKUP函数,VLOOKUP函数是Excel中的一个纵向查找函数,VLOOKUP是按列查找,最终返回该列所需查 ...

  5. python中 和 的区别_举例子让你明白python中is和==的区别

    在说 is 和 == 的区别之前,我们先理解下python的变量.python的变量和java的变量有很大的区别,因为一个是动态语言,另一个是静态语言. java的变量就像是个盒子,是把对象的地址装进 ...

  6. ue4 函数和宏区别_【UE4】通俗易懂 用蓝图来学习 C++ 基础知识

    [前言]: 用老罗来学UE蓝图: https://zhuanlan.zhihu.com/p/135297007​zhuanlan.zhihu.com 再开个脑洞,用蓝图来类比学习C++基础知识. C+ ...

  7. python怎么安装打开文件不存在怎么办呢_如果文件不存在,Python中的open()不会创建文件...

    16 个答案: 答案 0 :(得分:712) 您应该open使用w+模式: file = open('myfile.dat', 'w+') 答案 1 :(得分:112) 以下方法的优点是,即使在路上引 ...

  8. html辅助方法以及常用属性值,ASP.NET MVC 2博客系列之一:强类型HTML辅助方法

    这是我针对即将发布的ASP.NET MVC 2所撰写的贴子系列的第一篇,这个博客贴子将讨论 ASP.NET MVC 2中新加的强类型HTML辅助方法. 现有的HTML辅助方法 ASP.NET MVC ...

  9. python接口自动化测试框架实战从设计到开发_【B0753】[java视频教程]Python接口自动化测试框架设计到开发完整版视频教程 it教程...

    Java视频教程名称:Python接口自动化测试框架设计到开发完整版视频教程   java自学网[javazx.com]  Python视频教程   it教程 Java自学网收集整理 java论坛&q ...

最新文章

  1. Socket通信原理探讨(C++为例)
  2. 小x的质数(线性O(n)筛素数)
  3. vs中没有fstream_vs++2010 编译说找不到 fstream.h 解决方法
  4. Oracle中table变量在JDBC中的运用
  5. 使用 NetCoreBeauty 优化 .NET CORE 独立部署目录结构
  6. Python reduce / map / filter 函数区别 - Python零基础入门教程
  7. java iterator_Java ArrayDeque iterator()方法与示例
  8. java 计算机程序_跟我学java—什么是计算机程序?
  9. Java中类和对象的区别
  10. CM311-1a linux游戏服务器操作立马拥有我的世界私人服务器哦
  11. python股票回测源码_Python爬虫回测股票的实例讲解
  12. 设备信息之硬盘序列号、设备序列号、操作系统安装时间、IP地址
  13. 华为2018软赛心得(西北36强)
  14. 阿里云视频服务(视频边缘智能服务)接入流程
  15. AD,Altium designer
  16. 计算机的正确配置文件,Windows10如何正确配置显示器颜色配置文件?
  17. Linux下访问默认80端口 映射到8080端口
  18. 再见2021,程序员如何走向鄙视链的顶端?
  19. 电脑自带字体包的文件夹位置
  20. Python编程语言优点有哪些?

热门文章

  1. 路由器有线桥接的两种方式异同
  2. Linux的触屏软件安装,触摸屏之linux3.4.2安装tslib
  3. 深入Linux内核(内存篇)—用户内存空间之VMA
  4. 无人驾驶工程师学习笔记(八)——Magnitude of the Gradient
  5. socket接口详解
  6. linux下FTP服务启动与关闭命令
  7. preload与prefetch对比
  8. java泛型方法的结构及使用
  9. 宝塔 SSL lnvalid response from 就这一个二级域名失败
  10. 六大设计模式原则-接口隔离原则