向量化字符串操作
使用pyhton的一个优势就是字符串处理起来比较容易。在此基础上创建的pandas同样提供了一系列向量化字符串操作,他们都是在处理(清理)现实工作中的数据时不可或缺的功能。向量化操作简化了纯数值的数组操作语法——我们不需要再担心数组的长度或维度,只需要关心需要的操作。然而,由于numpy并没有为字符串数组提供简单的接口,因此需要通过频繁的for循环(列表生成式)来解决问题。
Pandas为包含字符串的Series和Index对象提供了str属性堪称是两全其美的方法,他可以满足向量化字符串操作的需求,又可以正确的处理缺失值。
import pandas as pd
data = ['peter', 'paul', None, 'mary', 'guido']
names = pd.Series(data)
#将字符串转化为大写
names.str.capitialize()
#输出结果:
0 Peter
1 Paul
2 None
3 Mary
4 Guido
dtype: object
Pandas字符串方法列表
1、与python字符串方法相似的方法
常用的有:len(), lower(), upper(), startswith(), endswith(), strip(), index(), find(), capitalize(), split(), partition()
2、使用正则表达式的方法
pandas包装了一些根据python标准库的re模块实现的API
方法 | 描述 |
---|---|
match() | 对每个元素调用re.match(),返回布尔类型值 |
extract() | 对每个元素调用re.match(),返回p匹配的字符串数组(groups) |
findall() | 对每个元素调用re.findall() |
replace() | 用正则模式替换字符串 |
contains() | 对每个元素调用re.search(),返回布尔类型值 |
count() | 计算符合正则模式的字符串的数量 |
split() | 等价于str.split(),支持正则表达式 |
rsplit() | 等价于str.rsplit(),支持正则表达式 |
3、其他字符串方法
方法 | 描述 |
---|---|
get() | 获取元素索引上的值,索引从0开始 |
slice() | 对元素进行切片操作 |
slice_replace() | 对元素进行切片替换 |
cat() | 连接字符串(此功能比较复杂,建议阅读文档) |
repeat() | 重复元素 |
normalize() | 将字符串转换为Unicode规范形式 |
pad() | 在字符串的左边,右边或两边增加空格 |
wrap() | 将字符串按照指定的宽度换行 |
join() | 用分隔符连接Series的每个元素 |
get_dummies() | 按照分隔符提取每个元素的dummy变量,转换为one-hot编码的DataFrame |
#向量化字符串的取值和切片操作
monte = pd.Series(['Graham Chapman', 'John Cleese', 'Terry Gilliam', 'Eric Idle',
'Terry Jones', 'Michael Palin'])
#df.str.slice(0,3)等价于df.str[0:3]
monte.str[:3]
#输出结果:
0 Gra
1 Joh
2 Ter
3 Eri
4 Ter
5 Mic
dtype: object
#获取每个人的last name
monte.str.split().str.get(-1)
#输出结果:
0 Chapman
1 Cleese
2 Gilliam
3 Idle
4 Jones
5 Palin
dtype: object
#类别变量的编码get_dummies()
full_monte = pd.DataFrame({'name':monte,
'info':['B|C|D', 'B|D', 'A|C', 'B|D' ,'B|C', 'B|C|D']})
full_monte['info'].str.get_dummies('|')
#输出结果:
Out[80]:
A B C D
0 0 1 1 1
1 0 1 0 1
2 1 0 1 0
3 0 1 0 1
4 0 1 1 0
5 0 1 1 1