如果它是 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 函式以某種方式解決這個問題嗎?
uj5u.com熱心網友回復:
使用 strip 是不可能的,因為它沒有要洗掉的最大字符數的概念。所以我會使用 replace 和一個正則運算式來洗掉一個可選的前綴和一個可選的后綴:
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: object
uj5u.com熱心網友回復:
您可以使用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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424793.html
