7.4 字符串操作
字符串对象方法
对于大部分字符串操作应用而言,python内置的字符串对象方法已经能够满足要求,例如split
拆分、strip
修剪空白符、+
号连接字符串、join
连接列表或元组、in, index, find
方法定位子串、count
方法返回子串出现次数、replace
方法实现模式替换等等。
正则表达式
Python内置的re
模块负责对字符串应用正则表达式,re
模块的函数可以分为三类:模式匹配、替换以及拆分。一个regex
描绘了需要在文本中定位的一个模式,例如标会一个或多个空白符的regex
是\s+
,为了便于重用,可以用re.compile
编译一个regex
对象。下面是regex
的一些用法说明:
1 | import re |
另外如果不仅要找到匹配的模式,还想将模式分段输出,可以将模式待分段的各部分用圆括号包起来。
1 | pattern = r'([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\.([A-Z]{2,4})' |
Output:
1 | ('wesm', 'bright', 'net') |
对于带有分组功能的模式,findall
会返回一个元组列表。
1 | regex = re.compile(r""" |
Output:
1 | {'domain': 'bright', 'suffix': 'net', 'username': 'wesm'} |
pandas中矢量化的字符串函数
回到数据清理工作中,在分析前常常要做一些字符串规整化工作,包括处理缺失数据。
1 | data = {'Dave': 'dave@google.com', 'Steve': 'steve@gmail.com', |
虽然所有的字符串和正则表达式方法都能通过data.map
方法应用于各个值,但是如果存在上述数据中的NA就会报错。为了解决这个问题,Series提供了一些能够跳过NA值的字符串操作方法。
1 | data.str.contains('gmail') |
Output:
1 | Dave False |
同样支持增则表达式和相应的re
选项。
1 | matches = data.str.match(pattern, flags=re.IGNORECASE) |
Output:
1 | Dave (dave, google, com) |