文字处理

文字处理

作者: 莫烦 编辑: 莫烦 发布于: 2022-03-06

相比 Python 的科学运算神器 Numpy,Pandas 还有一个特别优势的地方,那就是处理数据库当中的文字信息。 对比 Numpy,Numpy 是一个纯数据处理的库,在数据处理的速度上, 是要优于 Pandas 的。但是在处理数据的丰富度上,比如要处理文字,日期型数据的时候,Pandas 还是有很大优势的。 今天我们就来看看处理文本数据时,Pandas 可以怎么用。

本节要囊括的功能有:

  • 格式化字符
    • str.upper(); str.lower(); str.len()
    • str.strip(); str.lstrip(); str.rstrip()
    • str.split()
  • 正则方案
    • str.contains(); str.match(); str.startswith(); str.endswith()
    • str.replace()
    • str.extract(); str.extractall()
  • 拼接
    • str.cat()

格式化字符

首先,我觉得我需要对标一下 Python 中自带的文字处理功能。 我在这节 Python 基础内容中也提到,Python 本身就有很多自带的文字函数。 比如 strip() , upper() 等,我们就来对应着学习吧。

注意如果要用到 Pandas 丰富的文字处理功能,你要确保 Series 或者 DataFrame 的 dtype="string",如果不是 string, 比如我们刚从一个 excel 中读取出来 一个数据,自动读的,没有解析到 string 格式, 我们怎么调整呢? 其实也简单。

好,牢记这点,我们接着来对比原生 Python 的功能。

再来对比一下对文字的裁剪:

从结果可能看不清空白符有多少,但是实际上是把空白符都移除掉了。 下面再对比一下 split 拆分方法。

咦,pandas 这样拆分起来怪怪的,把结果都放到了一个 column 里面,我还记得上一节apply() 的时候,我可以加一个 result_type="expand",同样,在 split 中也有类似的功能,可以将拆分出来的结果放到不同的 column 中去。

你看,一共拆出了三个 column,但是有些 column 因为没有 split 出那么多值,所以显示的也是 pd.nan

这里还有一点我想说,我们上面都是在 Series 里面做实验,其实 DataFrame 也是一样的。 你要做的,只是先选一个 column 或者 row,拿到一个 Series 再开始做 str 的处理

正则方案

正则是一个很有用的东西,我们在 Python 基础 中也花了大功夫来学习正则表达式, 用特殊规则获取到特殊的文本。在演示的第一件事情就是它是否真的可以找到一些东西。我们用 str.contains()str.match() 来确认它真的找到了匹配文字。

注意,如果你还不了解正则表达式,我强烈建议你先看一下我的正则教学。 要不然你也看不懂我写的匹配规则,比如这里 [0-9][a-z] 表示要匹配 0~9 的任何数字,之后再接着匹配 a~z 的任何字母。

现在请你把 str.contains() 换成 str.match() 看看结果有无变化。仔细的你肯定发现了,11c 这个字符,用 contains() 可以匹配, 但是 match() 却不能。那是因为 只要包含正则规则,contains 就为 True, 但是 match() 的意思是你的正则规则要完全匹配才会返回 True。

那么为了要让 match 匹配 11c 我们就需要把规则改成 r"[0-9]+?[a-z]。至于为什么, 那请看到我的正则教学

还有一个十分有用,而且我觉得是最重要的,就是 replace 了,因为这真的减轻了我们很多复制粘贴的工作,比如 Excel 中人工按照一个规则修改老板给的新任务。 下面同样,我们对比 Python 原生的 replace,来验证一下。

但是比原生 Python 强大的是,这个 replace 是支持正则的。我们把所有数字都替换成这个 NUM 吧。

除了替换原本文字里的东西,我们还可以去从原本文字里找到特定的文字。有点像正则中的 findall 函数。

r"([ab])(\d)" 这一个正则匹配我简单介绍一下,其中有两个括号,第一个括号是想提取的第一种规则,第二个是第二种想提取的规则。 那么运行出来,你会看到有两个 column,分别对应着这两个提取规则出来的值。最后一行出来的结果是两个 NaN,也就意味着第三个数据没有提取出来任何东西。

对应 str.extract() 还有一个 str.extractall() 函数,用来返回所有匹配,而不是第一次发现的匹配。

拼接

将两个文本 Series 拼接到一起的方法多种多样。大多情况我们是想结合两个 Series 而形成一个新的 Series。比如下面这样。

上面这是将两个文字拼接成新的文字,如果你想了解如何在 pandas 中做 df 的数据上的拼接,比如 2 columns 和 3 columns 的 df 做横向拼接等, 我们会在这节 Pandas 的拼接专门讲到,因为里面涉及的拼接方法实在是太多了, 在这里讲不完。

总结

可以看到,文字处理包罗万象,有很多方法。我们挑重点的,调有用的。如果觉得这些对于你还不够, 你可以参考到官方文档,获取到更多信息。


降低知识传递的门槛

莫烦经常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛免费 奉献我的所学正是受这种态度的影响。 通过 【赞助莫烦】 能让我感到认同,我也更有理由坚持下去。

    数据的伙伴 Pandas