我在这里有一点问题:
我实际上有一个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
我怎么能这样做?
答案 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']