Pandas允许将字符串和正则表达式简洁地应用到数组上。
1.字符串对象方法:
Python内建的字符串方法在日常已经足够使用。
str = "米筑 ,设计师 , 平台"
# split()方法用于分割字符串
print(str.split(','))
print('---------------')
# split()经常与strip()方法一起使用,用于清除空格
str_new = [x.strip() for x in str.split(',')]
print(str_new)
print('---------------')
# join()方法用于使用字符串粘和其他字符串序列
print('--'.join(str_new))
print('---------------')
# in用于检测子字符串
print('米筑' in str_new)
print('---------------')
# index()和find()方法返回子字符串的位置,不同的是如果没有找到index()返回ValueError,find()返回-1
print(str.index('米筑'))
print(str.find('台'))
print('---------------')
# count()方法返回某个特定子字符串在字符串中出现的次数
print(str.count('米'))
print('---------------')
# replace()方法用于字符串替代操作,通常传入空字符串来删除某个模式
print(str.replace(' ',''))
['米筑 ', '设计师 ', ' 平台']
---------------
['米筑', '设计师', '平台']
---------------
米筑--设计师--平台
---------------
True
---------------
0
11
---------------
1
---------------
米筑,设计师,平台
2.正则表达式:
正则表达式提供了一种在文本中灵活查找或匹配字符串模式的方法。Python中内建的re模块是用于将正则表达式应用到字符串上的库。
更多正则表达式使用内容可以查看Python网络爬虫板块中的re库使用文章。
3.向量化字符串函数:
在日常数据处理工作中经常会遇到包含字符串的列含有缺失值,这时一些方法(例如map函数)作用到NaN值是会失败。为了解决这个问题,Series有面向数组的方法用于跳过NaN值的字符串操作,这些方法通过Series的str属性进行调用。
方法 | 说明 |
---|---|
cat | 根据可选的分隔符按元素粘和字符串 |
contains | 返回是否含有某个模式/正则表达式的布尔型数组 |
count | 返回指定模式出现的次数 |
extract | 使用正则表达式从字符串Series中分组抽取一个或多个字符串,返回的结果是每个分组形成的一列DataFrame |
endswith | 等价于对每个元素使用x.endwith |
startswith | 等价于对每个元素使用x.startwith |
findall | 找出字符串中所有模式/正则表达水匹配项,返回一个列表 |
get | 对每个原色进行索引,获得第i个元素 |
isalnum | 等价于内建的str.alnum |
isalhpa | 等价于内建的str.isalhpa |
isdecimal | 等价于内建的str.isdecimal |
isdigit | 等价于内建的str.isdigit |
islower | 等价于内建的str.islower |
isnumeric | 等价于内建的str.isnumeric |
isupper | 等价于内建的str.isupper |
join | 通过指定的分隔符联合字符串 |
len | 返回字符串的长度 |
lower、upper | 转换大小写 |
match | 使用re.match将正则表达式应用到每个元素上,将匹配分组以列表形式返回 |
pad | 将空白加到字符串的左边、右边或两边 |
center | 等价于pad(side=’both’) |
repeat | 将字符串重复指定次(s.str.repeat(3)等价于将字符串复制3次str×3 |
replace | 以指定模式替代字符串 |
slice | 对Series中的字符串进行切片 |
split | 以分隔符或正则表达式对字符串进行拆分 |
strip | 对字符串两侧的空白和换行符进行消除 |
retrip | 消除字符串右边的空白 |
lstrip | 消除字符串左边的空白 |
dict = {'AAA':'111111@qq.com','BBB':'222222@163.com','CCC':np.nan,'DDD':'333333@qq.com'}
data = pd.Series(dict)
print(data)
print('---------------')
print(data.isnull)
print('---------------')
print(data.str.contains('qq'))
AAA 111111@qq.com
BBB 222222@163.com
CCC NaN
DDD 333333@qq.com
dtype: object
---------------
<bound method Series.isnull of AAA 111111@qq.com
BBB 222222@163.com
CCC NaN
DDD 333333@qq.com
dtype: object>
---------------
AAA True
BBB False
CCC NaN
DDD True
dtype: object
Reference:
《Python for Data Analysis:Data Wrangling with Pandas,Numpy,and IPython》