pandas:快速处理字符串方法
前言
当我们遇到一个超级大的DataFrame,里面有一列类型为字符串,要将每一行的字符串都用同一方式进行处理,一般会想到遍历整合DataFrame,但是如果直接这样做的话将会耗费很长时间,有时几个小时都处理不完。于是就有了本篇文章所要分享给大家的:pandas快速处理字符串方法。
提示:为方便快捷地解决问题,本文仅介绍主要功能。
一、向量化字符串操作简介
向量化操作简化了纯数值的数组操作语法,我们不需要再担心数组的长度或维度,只需要把中心放在操作上面。而对字符串的向量化需要工具包的支持,如Numpy就没办法直接对字符串进行向量化操作,只能通过繁琐的循环来实现。Pandas则可以很好的处理这类问题。
二、str方法的简介
Python会处理字符串起来会很容易,作为工具包的Pandas同样可以简单快速的处理字符串,几乎把Python内置的字符串方法都给复制过来了,这种方法就是Pandas内置的str方法,通俗来说就可以将series和index对象中包含字符串的部分简单看作单个字符串处理,达到批量简单快速处理的目的。
三、str方法介绍
1、类似Python处理字符串的方法
与Python内置的字符串处理方法类似,包含以下函数:
len() | lower() | translate() | islower() |
ljust() | upper() | startswith() | isupper() |
rjust() | find() | endswith() | isnumeric() |
center() | rfind() | isalnum() | isdecimal() |
zfill() | index() | isalpha() | split() |
strip() | rindex() | isdigit() | rsplit() |
rstrip() | capitalize() | isspace() | partition() |
lstrip() | swapcase() | istitle() | rpartition() |
除此函数之外,也可以直接通过切片方法对字符串进行批量处理。下面是例子。
import pandas as pd
str_data = pd.DataFrame({'name':['Verne Raymond','Chapman Becher','Patrick George','Saxon MacArthur'],
'age':[18,22,21,16]})
Out[0]:
name age
0 Verne Raymond 18
1 Chapman Becher 22
2 Patrick George 21
3 Saxon MacArthur 16
len()函数使用:
str_data['name'].str.len()
Out[1]:
0 13
1 14
2 14
3 15
Name: name, dtype: int64
split()函数使用:
str_data['name'].str.split(' ')
str_data['name'].str.split(' ',expand=True)#将分开的字符串放在两列
Out[2]:
0 [Verne, Raymond]
1 [Chapman, Becher]
2 [Patrick, George]
3 [Saxon, MacArthur]
Name: name, dtype: object
Out[3]:
0 1
0 Verne Raymond
1 Chapman Becher
2 Patrick George
3 Saxon MacArthur
其他函数都是同样的方式,函数具体参数可以参考官方文档:pandas.Series.
直接对字符串进行切片:
str_data['name'].str[:5]
Out[4]:
0 Verne
1 Chapm
2 Patri
3 Saxon
Name: name, dtype: object
2、使用正则表达式方法
方法 | 描述 |
---|---|
match() | 在每个元素上调用re.match(),返回布尔值 |
extract() | 在每个元素上调用re.match(),返回作为字符串的每个分组 |
findall() | 在每个元素上调用re.findall() |
replace() | 将模式串的每次出现替换为一些其它字符串 |
contains() | 在每个元素上调用re.search(),返回布尔值 |
count() | 统计模式串的出现次数 |
split() | 等价于str.split(),但是接受正则表达式 |
rsplit() | 等价于str.rsplit(),但是接受正则表达式 |
下面是例子:
replace()函数使用
str_data['name'].str.replace(' ','-')
Out[5]:
0 Verne-Raymond
1 Chapman-Becher
2 Patrick-George
3 Saxon-MacArthur
Name: name, dtype: object
extract()函数使用
str_data['name'].str.extract('([A-Za-z]+)')
Out[6]:
0
0 Verne
1 Chapman
2 Patrick
3 Saxon
正则表达式方法这里不再赘述。
四、总结
这里介绍了Pandas在处理字符串上提供的一些快速处理方法,将重点部分进行阐述,如有错误请大家指正。后面还会讲解类似快速处理方法如:map()、apply()、applymap()等。