9. 字符串的向量化操作¶
数据科学的处理离不开字符串的处理,相应的pandas也提供了字符串向量化操作的功能,我们一般利用这个来对采集来的信息进行清理。
我们可以使用python的方式来处理字符串,但是一旦字符串中包含缺省值,此时,使用pandas的字符串向量化功能就能避免出现崩溃的情况。
#
import pandas as pd
strs = ['One', "Two", "Three", None, "Four"]
strs = pd.Series(strs)
print(strs)
0 One
1 Two
2 Three
3 None
4 Four
dtype: object
9.1. 字符串向量化应用初步¶
#对字符串进行大写转换
s = strs.str.upper()
print(s)
# 对字符串进行小写转换
ss = strs.str.lower()
print("\n\n", ss)
0 ONE
1 TWO
2 THREE
3 None
4 FOUR
dtype: object
0 one
1 two
2 three
3 None
4 four
dtype: object
9.2. 其他pandas字符串方法¶
python中字符串的方法基本上可以直接应用在pandas中,需要注意的是返回值的不同,需要相应做出调整,例如判断类的返回的是一个bool值的数据结构,len之类的返回的是一个值。
相应字符串方法不在一一举例,需要的时候可以查看手册。
9.3. 正则表达式¶
正则是字符串的大杀器,在pandas中同样也实现了正则的一些接口,如以下API:
- match: 调用re.match, 返回bool类型内容
- extract: 调用re.match, 返回匹配的字符串组groups
- findall: 调用re.findall
- replace: 正则的替换模式
- contains: re.search,返回bool内容
- count: 利用正则模式统计数量
- split:等价于 str.split, 支持正则
- rsplit: 等价于str.rsplit,支持正则
print("strs = \n", strs)
print()
a = strs.str.extract('([O, o, n, e, N, T ]+)')
print(a)
strs =
0 One
1 Two
2 Three
3 None
4 Four
dtype: object
0
0 One
1 T
2 T
3 NaN
4 o
9.4. 其他字符串的使用方法¶
pandas还提供了一些其他的方法来实现字符串的操作。
- get: 获取索引位置上的值,start=0
- slice: 对元素进行切片
- slice_replace: 对元素进行切片替换
- cat: 连接字符串
- repeat:重复元素
- normalize: 将字符串转换为Unicode规范形式
- pad: 在字符串的左边,右边或者两边增加空格
- wrap:将字符串按照指定宽度换行
- join: 用分隔符链接Series的每个元素
- get_dummies: 按照分隔符提取每个元素的dummy变量,转换为one-hot编码的DataFrame
# 对slice的使用和函数的直接切片一个效果
# df.str.slice(2,5) 等于 df.str[2:5]
print("strs = \n", strs)
print()
a = strs.str.slice(1,4)
print(a)
print()
# 等价于
b = strs.str[1:4]
print(b)
strs =
0 One
1 Two
2 Three
3 None
4 Four
dtype: object
0 ne
1 wo
2 hre
3 None
4 our
dtype: object
0 ne
1 wo
2 hre
3 None
4 our
dtype: object
# df.str.get(i) 和 df.str[i]功能类似
# 以下案例用字母o切分字符串后选择后面的一组
a = strs.str.split('o').str.get(-1)
print(a)
0 One
1
2 Three
3 None
4 ur
dtype: object
iii. v. get_dummies
如果数据中包含已经被编码的指标(coded indicator), 可以使用get_dummies快速的把编码的信息分解。
# 假定: A=游泳, B=爬山, C=跑步, D=篮球
df = pd.DataFrame({'english':strs,
'hobbies':["B|C", "A|C|D", "B|D", "A|B|C", "A|B|C|D"]})
print(df)
print()
a = df['hobbies'].str.get_dummies('|')
print(a)
english hobbies
0 One B|C
1 Two A|C|D
2 Three B|D
3 None A|B|C
4 Four A|B|C|D
A B C D
0 0 1 1 0
1 1 0 1 1
2 0 1 0 1
3 1 1 1 0
4 1 1 1 1