我正在使用python来分析和编辑来自蛋白质数据库的一些信息。有一个具有此输出的字典:
NC_018142.1_1102_ID=1_1102 (**1277003**, 1279534, 4, 'CAS-II-C 0.64')
NC_018142.1_1103_ID=1_1103 (1279648, 1280793, 4, 'CAS-II-C 0.64')
NC_018142.1_1104_ID=1_1104 (1280954, 1282252, 4, 'CAS-II-C 0.64')
NC_018142.1_1458_ID=1_1458 (1650240, 1651379, 4, 'CAS-II-C 0.64')
NC_018142.1_1459_ID=1_1459 (1651731, 1651955, 4, 'CAS-II-C 0.64')
NC_018142.1_1460_ID=1_1460 (1651976, 1652779, 4, 'CAS-II-C 0.64')
NC_018142.1_1461_ID=1_1461 (1652848, **1653054**, 4, 'CAS-II-C 0.64')
NC_018142.1_1906_ID=1_1906 (**2167100**, 2169223, 5, 'CAS-III-D 0.61')
NC_018142.1_1907_ID=1_1907 (2169220, 2171208, 5, 'CAS-III-D 0.61')
NC_018142.1_1908_ID=1_1908 (2171205, **2172977**, 5, 'CAS-III-D 0.61')其中键显示一个蛋白质id,值的第一列显示dna字符串中的开始,第二列显示结束,第三列显示蛋白质的数目,最后一列显示一种免疫系统类型。我想要做的是得到如下的输出:
NC_018142 (1277003, 1653054, 4, 'CAS-II-C 0.64')
NC_018142 (2171205, 2172977, 5, 'CAS-III-D 0.61')开始是dna串的开始,末端是字符串中关于蛋白质组的最后一个位置。因此,开始是从第一行开始,结束是从最后一行开始的关于蛋白质组的开始。蛋白质组4开始: 1277003,结束: 1653054。有谁能告诉我一些想法,并帮助我如何做到这一点?谢谢
发布于 2020-06-05 17:55:15
试试这个,如果这是你想要的,让我知道,这样我就可以评论每一行都在做什么。
import pandas as pd
d ={'NC_018142.1_1102_ID=1_1102':('**1277003**', 1279534, 4, 'CAS-II-C 0.64'),
'NC_018142.1_1103_ID=1_1103':(1279648, 1280793, 4, 'CAS-II-C 0.64'),
'NC_018142.1_1104_ID=1_1104':(1280954, 1282252, 4, 'CAS-II-C 0.64'),
'NC_018142.1_1458_ID=1_1458':(1650240, 1651379, 4, 'CAS-II-C 0.64'),
'NC_018142.1_1459_ID=1_1459':(1651731, 1651955, 4, 'CAS-II-C 0.64'),
'NC_018142.1_1460_ID=1_1460':(1651976, 1652779, 4, 'CAS-II-C 0.64'),
'NC_018142.1_1461_ID=1_1461':(1652848, '**1653054**', 4, 'CAS-II-C 0.64'),
'NC_018142.1_1906_ID=1_1906':('**2167100**', 2169223, 5, 'CAS-III-D 0.61'),
'NC_018142.1_1907_ID=1_1907':(2169220, 2171208, 5, 'CAS-III-D 0.61'),
'NC_018142.1_1908_ID=1_1908':(2171205, '**2172977**', 5, 'CAS-III-D 0.61')
}
df = pd.DataFrame(d).T.reset_index()
col_names = ['proteinID', 'start', 'end', 'group', 'type']
df.columns = col_names
df['proteinID'] = df['proteinID'].str.split('.').str[0]
df['start'] = df['start'].astype(str).str.replace('*', '')
df['end'] = df['end'].astype(str).str.replace('*', '')
df = df.groupby(['proteinID', 'group']).agg({'start':'first', 'end':'last','type':'first'}).reset_index()
df = df[col_names]
df最终的结果将是熊猫的数据:
proteinID start end group type
0 NC_018142 1277003 1653054 4 CAS-II-C 0.64
1 NC_018142 2167100 2172977 5 CAS-III-D 0.61https://stackoverflow.com/questions/62220264
复制相似问题