我想删除的第一个字母,如果它是一个C和最后一个字母,如果它是一个F或W。但当我用:
df1['trimmed_seq'] = df1['seq'].str.strip("CFW")输入:
seq
0 CASSAQGTGDRGYTF
1 CASSLVATGNTGELFF
2 CASSKGTVSGLSG
3 CALKVGADTQYF
4 CASSLWASGRGGTGELFF
5 CASSLLGWEQLDEQFF
6 CASSSGTGVYGYTF
7 CASSPLEWEGVTEAFF
8 CASSFWSSGRGGTDTQYF
9 CASSAGQGASDEQFF输出:
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函数来解决这个问题?
发布于 2022-02-16 10:50:11
您可以使用loc操作筛选出所需的行,并使用.str执行字符串格式设置。
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]发布于 2022-02-16 10:57:33
这是不可能的使用条,因为它没有概念的最大数目的字符要删除。因此,我将使用替换和regex来删除可选前缀和可选后缀:
df['seq'].str.replace(r'^C?(.*?)[FW]?$', r'\1')如预期的那样:
0 ASSAQGTGDRGYT
1 ASSLVATGNTGELF
2 ASSKGTVSGLSG
3 ALKVGADTQY
4 ASSLWASGRGGTGELF
5 ASSLLGWEQLDEQF
6 ASSSGTGVYGYT
7 ASSPLEWEGVTEAF
8 ASSFWSSGRGGTDTQY
9 ASSAGQGASDEQF
Name: seq, dtype: objecthttps://stackoverflow.com/questions/71140361
复制相似问题