首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >先删除(如果C)和最后一个字母if (F或W)

先删除(如果C)和最后一个字母if (F或W)
EN

Stack Overflow用户
提问于 2022-02-16 10:45:19
回答 2查看 41关注 0票数 0

我想删除的第一个字母,如果它是一个C最后一个字母,如果它是一个F或W。但当我用:

代码语言:javascript
复制
df1['trimmed_seq'] = df1['seq'].str.strip("CFW")

输入:

代码语言:javascript
复制
    seq
0   CASSAQGTGDRGYTF
1   CASSLVATGNTGELFF
2   CASSKGTVSGLSG
3   CALKVGADTQYF
4   CASSLWASGRGGTGELFF
5   CASSLLGWEQLDEQFF
6   CASSSGTGVYGYTF
7   CASSPLEWEGVTEAFF
8   CASSFWSSGRGGTDTQYF
9   CASSAGQGASDEQFF

输出:

代码语言:javascript
复制
    seq
0   ASSAQGTGDRGYT
1   ASSLVATGNTGEL
2   ASSKGTVSGLSG
3   ALKVGADTQY
4   ASSLWASGRGGTGEL
5   ASSLLGWEQLDEQ
6   ASSSGTGVYGYT
7   ASSPLEWEGVTEA
8   ASSFWSSGRGGTDTQY
9   ASSAGQGASDEQ

我的问题是,例如,对于行'1‘,两个F的末尾被移除,如果序列以CFW结尾,所有这一切都会被删除。

所以我的问题是:是否可以用相同的str.strip函数来解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-16 10:50:11

您可以使用loc操作筛选出所需的行,并使用.str执行字符串格式设置。

代码语言:javascript
复制
mask = (df.seq.str[0] == 'C') 
df.loc[mask, "seq"] = df.loc[mask, "seq"].str[1:]

mask = (df.seq.str[-1] == 'F') | (df.seq.str[-1] == 'W') 
df.loc[mask, "seq"] = df.loc[mask, "seq"].str[:-1]
票数 1
EN

Stack Overflow用户

发布于 2022-02-16 10:57:33

这是不可能的使用条,因为它没有概念的最大数目的字符要删除。因此,我将使用替换和regex来删除可选前缀和可选后缀:

代码语言:javascript
复制
df['seq'].str.replace(r'^C?(.*?)[FW]?$', r'\1')

如预期的那样:

代码语言:javascript
复制
0       ASSAQGTGDRGYT
1      ASSLVATGNTGELF
2        ASSKGTVSGLSG
3          ALKVGADTQY
4    ASSLWASGRGGTGELF
5      ASSLLGWEQLDEQF
6        ASSSGTGVYGYT
7      ASSPLEWEGVTEAF
8    ASSFWSSGRGGTDTQY
9       ASSAGQGASDEQF
Name: seq, dtype: object
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71140361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档