只保留“id”的一部分。模式前的字符串(" _")

时间:2018-05-11 22:28:49

标签: python string pandas

我在这里有一点问题:

我实际上有一个fasta文件:

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

而我所说的只是获取id名称的第一部分,我用过:

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

如果我只想提取对应于gene_name的原始数据:" g2.t1",并创建一个新的数据帧,这里的例子如下:

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

我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

使用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']