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·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

  更多精彩

  写在最后

转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。

扫描下方二维码,关注我们,解锁更多精彩内容!

一个只分享干货的

生信公众号

  • 0
    点赞
  • 0
    评论
  • 10
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

生信修炼手册

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值