仅在模式(“\”)之前保留“id”字符串的一部分

2024-05-12 23:26:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个小问题:

我实际上有一个fasta文件,比如:

g1.t1_0035_0042
ATTAGGAGGAA
g2.t1_0042_0042
ATTAGGAGA
g3.t1_0042_0035
ATTGGAAT
etc

我想说的只是得到身份证名字的第一部分,我用了:

for record in SeqIO.parse(sp1_aa_corrected, 'fasta'):
    print(record.id[record.id.index("_")::-1])

但我得到:

t.1g
t.2g
t.2g

我想得到:

g1.t1
g2.t1
g3.t1

没有_number_number 谢谢你的帮助

另一个问题: 如果我有这样一个数据帧:

gene_name   scaf_name       scaf_length cov_depth       GC
g3.t1       scaffold 6      56786         79            0.39
g4.t1       scaffold 6      56786         79            0.39
g1.t1       scaffold 256    789765        86            0.42
g2.t1       scaffold 890    3456          85            0.40
g5.t1       scaffold 1234   590           90            0.41

如果我只想提取对应于基因名称“g2.t1”的原始数据,并创建一个新的数据帧,例如:

gene_name   scaf_name       scaf_length cov_depth       GC
g2.t1       scaffold 890    3456          85            0.40

我怎么能做到


Tags: 数据nameidnumberrecordcovlengthfasta
1条回答
网友
1楼 · 发布于 2024-05-12 23:26:45

使用str.split按特定字符拆分。在这种情况下,还可以指定maxsplit=1。因为它返回一个列表,所以需要索引第一个元素

x = 'g1.t1_0035_0042'

res = x.split('_', maxsplit=1)[0]

print(res)

g1.t1

要过滤数据帧,只需使用:

res = df[df['gene_name'] == 'g2.t1']

相关问题 更多 >