经常被人忽视的:Pandas 文本数据处理!
共 1886字,需浏览 4分钟
·
2021-11-15 01:56
毋庸置疑,Pandas是使用最广泛的 Python 库之一,它提供了许多功能和方法来执行有效的数据处理和数据分析。
我们平时的操作,大多围绕着数字的处理,这是因为大家习惯将表格数据与数字联系起来。然而我们无论是使用Excel还是Pandas,其实都离不开文本类型的数据。
![](https://filescdn.proginn.com/bc4bf62cff97324e4b7b4d1d74bad920/c10f0bae4a456583e5883f810f6ef8b7.webp)
今天,我们会通过一个例子,总结这些常用的Pandas处理文本数据的操作。
首先,先创建一个带有模拟数据的DataFrame。
import pandas as pd
df = pd.DataFrame({
"姓": ["王","仲","宝", "王", "朱"],
"名": ["玉环","觅晴","清俊", "鸿博", "小五"],
"户籍地址": ["黑龙江省·哈尔滨市", "黑龙江省·哈尔滨市", "黑龙江省·佳木斯市", "广西·柳州市", "湖北省·武汉市"],
"微信": ["Tomout", "Sm857", "Adamshffhhjfj", "Tull88", "ZPW505"],
"邮箱": ["tom02@163.com", "smitt@163.com", "adams@163.com", "tull03@163.com", "five@163.com"]
})
df
![](https://filescdn.proginn.com/955887669c91730d054fd2adb560030e/614e3d55c9bd90206132d77e4b10bf5b.webp)
一共五列文本数据:姓、名、户籍地址、微信id、邮箱地址。
讲个冷知识:微信id是不区分大小写的。
![](https://filescdn.proginn.com/6e27a755e73864dfbe50c0c0765b9024/c563a6bde50b51e87e4a4f266af21599.webp)
如果将微信id这列的文本数据,全部转换为小写,在Pandas中可以这样操作。
df["微信"] = df["微信"].str.lower()
df
![](https://filescdn.proginn.com/59a403f801bab074d64d13933b789961/5170a6f380d00fce216a8d82a68a1de5.webp)
我们可以通过组合姓氏和名字,来创建姓名这列。
df["姓名"] = df["姓"] + df["名"]
df
但是在默认情况下,新列会被添加在末尾。
想要更多的自定义选择,可以参考下面的代码。既可以在特定位置插入创建新列,也可以使用 cat 方法组合字符串(此处还可设置分隔符sep,这里并未设置)。
df.insert(2,
"姓名",
df["姓"].str.cat(df["名"], sep=""))
df
![](https://filescdn.proginn.com/c9b71b8b6746ed52eca7b0d555bd1d04/c6854fea80bcd208985a64b7e24f628b.webp)
对字符串的一个常见操作是拆分,当文本数据包含多条信息时,它就派上用场啦。
例如,户籍地址这列包括省份和城市,我们可以通过拆分此列来提取城市的信息。
df["城市"] = df["户籍地址"].str.split("·", expand=True)[1]
df
![](https://filescdn.proginn.com/f73517a00891fdf017bc27ae3e955629/9934848b41c1df6376cfcf2424549dc4.webp)
对字符串的另一个常见操作是筛选过滤,那么在Pandas中如何操作呢?
如果想筛选“王”字开头的姓名,既可以直接筛选 姓 这一列,也可以使用startswith()
来过滤。
startswith()
和endswith()
这两个函数,是分别基于字符串的第一个或最后一个字母进行筛选。
df[df["姓名"].str.startswith("王")]
![](https://filescdn.proginn.com/a8227029cfdf9743e8d84d07d980b607/03c50a08e32cea2d0de9cf0bf749e053.webp)
注意:
startswith()
和endswith()
这两个函数,还可以通过设置参数,既能检测多个字符,又能设置字符串检测的起始和结束位置。
![](https://filescdn.proginn.com/f5386fd5c88bd7212bb8519da28a1914/7a2a5e56278ab6d91b97742f631f7364.webp)
如果想直接筛选包含特定字符的字符串,可以使用contains()
这个方法。
例如,筛选户籍地址列中包含“黑龙江”这个字符的所有行。
df[df["户籍地址"].str.contains("黑龙江")]
![](https://filescdn.proginn.com/12381411fbb489d3d45f309ffb80f74d/d02409a2cf4330dde8309ca021d6a830.webp)
replace()
方法可用于替换字符串中的字符序列,通过该方法可以修改Pandas中的文本数据。
df["户籍地址"] = df["户籍地址"].str.replace("广西", "广西壮族自治区")
df
![](https://filescdn.proginn.com/b0cd4c5c24d7f6b4faf5c8047c014efb/4ac6b429883de93dddde3369ad68d24d.webp)
最后,我们还可以使用字符串的索引。
例如,我们可以用“str[:5]”
表达式选择前8个字符,用“str[-8:]”
选择后8个字符。
df["邮箱"].str[:5]
df["邮箱"].str[-8:]
![](https://filescdn.proginn.com/434f00977069f93c4b21eea04b0402c7/55de97d68ebff341de8d3eca317b13f0.webp)
本文已经罗列了在Pandas中比较常用文本数据处理操作,欢迎大家在评论区补充!
![](https://filescdn.proginn.com/26e98e713021ddcb159c760fb36b255e/1a28f759915194657ab81347be107da7.webp)
各位伙伴们好,詹帅本帅搭建了一个个人博客和小程序,汇集各种干货和资源,也方便大家阅读,感兴趣的小伙伴请移步小程序体验一下哦!(欢迎提建议)
推荐阅读