简单的字符拆分合并
# 简单的拆分,一般结合split和strip
In [31]: val = 'a ,b , guido '
In [32]: pieces = [x.strip() for x in val.split(',')]
In [33]: pieces
Out[33]: ['a', 'b', 'guido']
# join 把已拆分的内容合并
In [34]: '::'.join(pieces)
Out[34]: 'a::b::guido'
# 检测是否存在
In [36]: val
Out[36]: 'a ,b , guido '
In [35]: 'guido' in val
Out[35]: True
#找不到时返回异常值 ‘-1’
In [38]: val.find(':')
Out[38]: -1
# 返回所在的位置index
In [37]: val.index(',')
Out[37]: 2
#计数
In [40]: val.count(',')
Out[40]: 2
# 替换
In [41]: val.replace(',','::')
Out[41]: 'a ::b :: guido '
正则表达式
In [45]: import re
In [46]: text = "foo bar\t baz \tqux"
In [47]: text
Out[47]: 'foo bar\t baz \tqux'
In [48]: re.split('\s+',text)
Out[48]: ['foo', 'bar', 'baz', 'qux']
# 如果对多个字符应用同一个正则式,最好编译为一个可重用的regex对象
In [49]: regex = re.compile('\s+')
In [50]: regex.split(text)
Out[50]: ['foo', 'bar', 'baz', 'qux']
In [51]: regex.findall(text)
Out[51]: [' ', '\t ', ' \t']
书上那个过滤邮件的正则式..其实用greedy matching就能写得很短了,py4e有写。
pandas 中矢量化的字符串函数
主要就是把数据变为矢量化的数字,例如有无可以变为True/False(1/0)
In [52]: data = {'Dave':'dave@google.com','Steve':'steve@gmail.com','Rob':'rob@
...: gmail.com','Wes':np.nan}
In [56]: data = Series(data)
In [59]: data.isnull()
Out[59]:
Dave False
Rob False
Steve False
Wes True
dtype: bool
In [60]: data.str.contains('gmail')
Out[60]:
Dave False
Rob True
Steve True
Wes NaN
dtype: object
我好像学过正则表达式,但依然每次用都要打开笔记...
正则式最好是记住常用例子,每次做的时候再记一次。
2018.8.2