python3.6 pandas 规整字符串数据 - 字符拆分合并,正则表达式

简单的字符拆分合并

# 简单的拆分,一般结合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':'[email protected]','Steve':'[email protected]','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

你可能感兴趣的:(python3.6 pandas 规整字符串数据 - 字符拆分合并,正则表达式)