利用python实现下面内容:读取路径为C:\Users\92860\Desktop\gencode.v43.chr_patch_hapl_scaff.annotation.gff3的文件中type为gene的记录,将chrid,start,end,gene_id,gene_type,gene_name(不包括gene_id=,gene_type=或gene_name=三部分)和利用start和end计算得到的各基因长度length,整理为一个名为gdf的Dataframe(字段作为列名)。然后将gdf以Tab分隔的形式存储到文件gene.txt中(文件中不保留行标签)。
时间: 2023-11-27 09:52:06 浏览: 126
以下是实现上述内容的Python代码:
```python
import pandas as pd
# 读取文件,跳过前5行
df = pd.read_csv('C:\\Users\\92860\\Desktop\\gencode.v43.chr_patch_hapl_scaff.annotation.gff3', sep='\t', skiprows=5, header=None)
# 筛选type为gene的记录
df = df[df[2] == 'gene']
# 提取所需字段
gdf = df[[0, 3, 4, 8]]
gdf.columns = ['chrid', 'start', 'end', 'gene_info']
# 提取gene_id、gene_type、gene_name
gdf['gene_id'] = gdf['gene_info'].str.extract('gene_id=([^;]*)', expand=False)
gdf['gene_type'] = gdf['gene_info'].str.extract('gene_type=([^;]*)', expand=False)
gdf['gene_name'] = gdf['gene_info'].str.extract('gene_name=([^;]*)', expand=False)
# 计算基因长度
gdf['length'] = gdf['end'] - gdf['start'] + 1
# 整理为最终结果
gdf = gdf[['chrid', 'start', 'end', 'gene_id', 'gene_type', 'gene_name', 'length']]
gdf = gdf.reset_index(drop=True)
# 存储到文件
gdf.to_csv('gene.txt', sep='\t', index=False)
```
该代码会读取指定路径下的文件,并提取出其中type为gene的记录,并根据要求整理为一个名为gdf的Dataframe。最后将结果以Tab分隔的形式存储到gene.txt文件中。
阅读全文