在pandas中,通过DataFrame来存储文件中的内容,其中最常见的数据类型就是字符串了。针对字符串,pandas提供了一系列的函数,来提高操作效率。 这些函数可以方便的操作字符串类型
在pandas中,通过DataFrame来存储文件中的内容,其中最常见的数据类型就是字符串了。针对字符串,pandas提供了一系列的函数,来提高操作效率。
这些函数可以方便的操作字符串类型的Series对象,对数据框中的某一列进行操作,这种向量化的操作提高了处理效率。pandas中的字符串处理函数以str开头,常用的有以下几种
1. 大小写转换
通过str.lower和str.upper来实现,用法如下
>>> df = pd.DataFrame(['A', 'B', 'C', 'D'])>>> df
0
0 A
1 B
2 C
3 D
>>> df[1] = df[0].str.lower()
>>> df[2] = df[1].str.upper()
>>> df
0 1 2
0 A a A
1 B b B
2 C c C
3 D d D
2. 去除空白
和内置的strip系列函数相同,pandas也提供了一系列的去除空白函数,用法如下
>>> df = pd.DataFrame([' A', ' B', 'C ', 'D '])>>> df
0
0 A
1 B
2 C
3 D
# str.strip, 去除字符串前后两端的空白
>>> df[0].str.strip().array
<PandasArray>
['A', 'B', 'C', 'D']
Length: 4, dtype: object
# str.lstrip, 去除字符串前端的空白
>>> df[0].str.lstrip().array
<PandasArray>
['A', 'B', 'C ', 'D ']
Length: 4, dtype: object
# str.lstrip, 去除字符串后端的空白
>>> df[0].str.rstrip().array
<PandasArray>
[' A', ' B', 'C', 'D']
Length: 4, dtype: object
3. 拆分
通过str.split实现,可以指定拆分的次数,用法如下
>>> df = pd.DataFrame(['A_1_1', ' B_2_1', 'C_3_1', 'D_4_1'])# 默认按照指定的分隔符进行拆分,结果为列表
>>> df[0].str.split('_')
0 [A, 1, 1]
1 [ B, 2, 1]
2 [C, 3, 1]
3 [D, 4, 1]
Name: 0, dtype: object
# n参数,指定分隔的次数
>>> df[0].str.split('_', n = 1)
0 [A, 1_1]
1 [B, 2_1]
2 [C, 3_1]
3 [D, 4_1]
Name: 0, dtype: object
# expand 参数默认为False, True表示返回值为数据框
>>> df[0].str.split('_', expand=True)
0 1 2
0 A 1 1
1 B 2 1
2 C 3 1
3 D 4 1
4. 替换
通过str.replace来实现,通过正则表达式来进行全局替换,用法如下
>>> df = pd.DataFrame(['A_1_1', 'B_2_1', 'C_3_1', 'D_4_1'])# 第一个参数为需要替换的值
# 第二个参数为替换后的值
>>> df[0].str.replace('_', '-')
0 A-1-1
1 B-2-1
2 C-3-1
3 D-4-1
Name: 0, dtype: object
# 用正则表达式来进行替换
>>> df[0].str.replace('[\d_]+', '')
0 A
1 B
2 C
3 D
Name: 0, dtype: object
# regex参数的默认值为True, 表示第一个参数为正则表达式
# 当值为False时,表示第一个参数为常规的字符串
>>> df[0].str.replace('_', '-', regex=False)
0 A-1-1
1 B-2-1
2 C-3-1
3 D-4-1
Name: 0, dtype: object
5. 拼接
通过str.cat函数来实现,用法如下
>>> import pandas as pd>>> df = pd.DataFrame(['A', 'B', 'C', 'D'])
>>> df
0
0 A
1 B
2 C
3 D
# 单个Series对象,将所有数据拼接在一起
>>> df[0].str.cat()
'ABCD'
# sep参数制定分隔符
>>> df[0].str.cat(sep=',')
'A,B,C,D'
# 当两个数组拼接时,返回一个新的Series对象
>>> df[0].str.cat(['1','2', '3', '4'])
0 A1
1 B2
2 C3
3 D4
Name: 0, dtype: object
# 当拼接的对象为一个数据框时,将数据框的所有列都进行拼接
>>> df[1] = df[0].str.cat(['1','2', '3', '4'])
>>> df
0 1
0 A A1
1 B B2
2 C C3
3 D D4
>>> df[0].str.cat(df)
0 AAA1
1 BBB2
2 CCC3
3 DDD4
Name: 0, dtype: object
6. 判断是否包含子字符串
通过str.contain函数来实现局部查找,类似re.search函数,用法如下
>>> df = pd.DataFrame(['A_1_1', 'B_2_1', 'C_3_1', 'D_4_1'])>>> df
0
0 A_1_1
1 B_2_1
2 C_3_1
3 D_4_1
>>> df[0].str.contains('1')
0 True
1 True
2 True
3 True
Name: 0, dtype: bool
>>> df[0].str.contains('\w+')
0 True
1 True
2 True
3 True
Name: 0, dtype: bool
用str.match函数来实现从头开始的全局查找,类似re.match函数,用法如下
>>> df[0].str.match('1')0 False
1 False
2 False
3 False
Name: 0, dtype: bool
>>> df[0].str.match('\w+')
0 True
1 True
2 True
3 True
Name: 0, dtype: bool
7. 提取子字符串
通过str.extract和str.extractall函数来实现,用法如下
>>> df = pd.DataFrame(['A_1_1', 'B_2_1', 'C_3_1', 'D_4_1'])>>> df
0
0 A_1_1
1 B_2_1
2 C_3_1
3 D_4_1
# extract函数只提取一次符合匹配模式的字符串
>>> df[0].str.extract(r'(\w)_(\d)')
0 1
0 A 1
1 B 2
2 C 3
3 D 4
# 用下述写法指定数据框的表头
>>> df[0].str.extract(r'(?P<letter>\w)_(?P<digist>\d)')
letter digist
0 A 1
1 B 2
2 C 3
3 D 4
# extractall提取一个字符串中所有符合模式的字符串
# 返回值为一个行为多重索引的数据框
# match表示匹配的顺序,从0开始计数
>>> df[0].str.extractall(r'(?P<letter>\w)_(?P<digist>\d)')
letter digist
match
0 0 A 1
1 0 B 2
2 0 C 3
3 0 D 4
以上是部分常用的字符串函数,完整的字符串处理函数请查看官方的API文档。
·end·
一个只分享干货的
生信公众号