Pandas 文本数据处理!
我们平时的操作,大多围绕着数字的处理,这是因为大家习惯将表格数据与数字联系起来。然而我们无论是使用Excel还是Pandas,其实都离不开文本类型的数据。
今天,我们会通过一个例子,总结这些常用的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
一共五列文本数据:姓、名、户籍地址、微信id、邮箱地址。
讲个冷知识:微信id是不区分大小写的。
如果将微信id这列的文本数据,全部转换为小写,在Pandas中可以这样操作。
df["微信"] = df["微信"].str.lower()
df
我们可以通过组合姓氏和名字,来创建姓名这列。
df["姓名"] = df["姓"] + df["名"]
df
但是在默认情况下,新列会被添加在末尾。
想要更多的自定义选择,可以参考下面的代码。既可以在特定位置插入创建新列,也可以使用 cat 方法组合字符串(此处还可设置分隔符sep,这里并未设置)。
df.insert(2,
"姓名",
df["姓"].str.cat(df["名"], sep=""))
df
对字符串的一个常见操作是拆分,当文本数据包含多条信息时,它就派上用场啦。
例如,户籍地址这列包括省份和城市,我们可以通过拆分此列来提取城市的信息。
df["城市"] = df["户籍地址"].str.split("·", expand=True)[1]
df
对字符串的另一个常见操作是筛选过滤,那么在Pandas中如何操作呢?
如果想筛选“王”字开头的姓名,既可以直接筛选 姓 这一列,也可以使用startswith()
来过滤。
startswith()
和endswith()
这两个函数,是分别基于字符串的第一个或最后一个字母进行筛选。
df[df["姓名"].str.startswith("王")]
注意:
startswith()
和endswith()
这两个函数,还可以通过设置参数,既能检测多个字符,又能设置字符串检测的起始和结束位置。
如果想直接筛选包含特定字符的字符串,可以使用contains()
这个方法。
例如,筛选户籍地址列中包含“黑龙江”这个字符的所有行。
df[df["户籍地址"].str.contains("黑龙江")]
replace()
方法可用于替换字符串中的字符序列,通过该方法可以修改Pandas中的文本数据。
df["户籍地址"] = df["户籍地址"].str.replace("广西", "广西壮族自治区")
df
最后,我们还可以使用字符串的索引。
例如,我们可以用“str[:5]”
表达式选择前8个字符,用“str[-8:]”
选择后8个字符。
df["邮箱"].str[:5]
df["邮箱"].str[-8:]