Python中如何快速将基因通路DataFrame转换为指定结构的字典?
快速生成目标字典的两种高性能方案
方案1:pandas向量化实现(适合千万级以内数据集,代码最简洁)
利用pandas内置的字符串拆分、行爆炸、分组聚合能力,所有计算底层走C实现,远快于Python层面的手动循环:
import pandas as pd # 假设你的原始DataFrame变量名为df # 第一步:将逗号分隔的基因ID拆分为列表,再爆炸为单个基因占一行的结构 df_exploded = df.assign(gene=df['gene ID'].str.split(',')).explode('gene') # 第二步:按基因分组,收集所有所属通路ID,直接转为字典 gene_pathway_dict = df_exploded.groupby('gene')['gene pathway ID'].apply(list).to_dict()
方案2:defaultdict + itertuples实现(适合超大规模数据集,内存占用更低)
如果你的数据集行数超过百万,不想产生爆炸后的中间DataFrame占用额外内存,可以用这个方案,itertuples是pandas遍历行的最快接口,比iterrows性能高10~100倍:
from collections import defaultdict gene_pathway_dict = defaultdict(list) # 仅遍历需要的两列,减少不必要的开销 for pathway_id, gene_str in df[['gene pathway ID', 'gene ID']].itertuples(index=False): for gene in gene_str.split(','): gene_pathway_dict[gene].append(pathway_id) # 若不需要defaultdict的特性,可转为普通dict # gene_pathway_dict = dict(gene_pathway_dict)
两种方案都比常规的嵌套iterrows循环性能高至少一个数量级,数据量越大优势越明显。
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

