Python提供的字符操作非常的简单,使用起来也非常的方便。其实Pandas也提供了,一系列的向量化字符操作。它在处理一些杂乱无章的数据时,非常快速、实用。
下面用几个例子,证明它是怎样处理数据,跟Python的字符有什么差别?
与Python字符串方法相似的方法
几乎所有Python内置的字符串方法都被复制到Pandas的向量化字符串方法中。
下面的表格列举了,Pandas的str方法借鉴Python字符串方法的内容。
注意事项:这些方法的返回值跟Python的不一样。
例如:lower()方法,返回一个字符串series对象。
monte= pd.Series(['Graham Chapman', 'John Cleese', 'Terry Gilliam', 'Eric Idle', 'Terry Jones', 'Michael Palin'])monte.str.lower()
代码结果:
0 graham chapman1 john cleese2 terry gilliam3 eric idle4 terry jones5 michael palindtype: object
len()方法返回数值
monte.str.len()
代码结果:
0 141 112 133 94 115 13dtype: int64
startswith()方法返回的是布尔值
monte.str.startswith('T')
代码结果:
0 False1 False2 True3 False4 True5 Falsedtype: bool
split()方法返回的是列表
monte.str.split()
代码结果:
0 [Graham, Chapman]1 [John, Cleese]2 [Terry, Gilliam]3 [Eric, Idle]4 [Terry, Jones]5 [Michael, Palin]dtype: object
使用正则表达式的方法
Pandas的字符串方法还支持正则表达式,用这个方法可以处理每一个字符元素。
例如:可以提取元素前面的连续字母作为每个人的名字;
monte.str.extract('([A-Za-z]+)')
例如:找出所有开头和结尾都是辅音字母的名字,利用正则表达式中的开始符号(^)与结尾符号($)实现;
monte.str.findall(r'^[^AEIOU].*[^aeiou]$')
代码结果:
0 [Graham Chapman]1 []2 [Terry Gilliam]3 []4 [Terry Jones]5 [Michael Palin]dtype: object
其他字符串方法
下表列举了一些其他的字符串处理方法,包括跟python类似的切片方法slice和get,以及复杂的get_dummies()方法。
(1) 向量化字符串的取值与切片操作
get()与slice()操作可以,从每个字符串数组中获取向量化元素。
列如:我们可以通过str.slice(0, 3)获取每个字符串数组的前三个字符。也可以通过Python的标准取值方法,取得同样的效果。
monte.str[0:3]
代码结果:
0 Gra1 Joh2 Ter3 Eri4 Ter5 Micdtype: object
monte.str.slice(0, 3)
代码结果:
0 Gra1 Joh2 Ter3 Eri4 Ter5 Micdtype: object
get()与slice()操作还可以在split()操作之后使用。例如,要获取每个姓名的姓(last name),可以结合使用 split() 与 get()。
monte.str.split().str.get(-1)0 Chapman1 Cleese2 Gilliam3 Idle4 Jones5 Palindtype: object
(2) 指标变量
get_dummies()方法当你的数据有一列包含了若干已被编码的指标时,这个方法它就能派上用场了。
例如:假设有一个包含了某种编码信息的数据集,如 A= 出生在美国、B= 出生在英国、C= 喜 欢奶酪、D= 喜欢午餐肉。
full_monte= pd.DataFrame({'name': monte, 'info': ['B|C|D', 'B|D', 'A|C', 'B|D', 'B|C', 'B|C|D']})full_monte
get_dummies()方法可以让你快速将这些指标变量分割成一个独热编码的DataFrame(每 个元素都是0或1)。
full_monte['info'].str.get_dummies('|')
通过Pandas自带的这些字符串操作方法,你就可以建立一个功能无比强大的字符串处理程序来清洗自己的数据了。懂得了这些pandas的方法,就不用去害怕那些杂乱无章的数据。