You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas:将含列表的记录拆分为单独行(NCBI RefSeq UCSC Schema)

解决Pandas DataFrame中外显子坐标拆分问题

我来帮你搞定这个问题!这种把逗号分隔的多值列拆分成对应行的需求在处理基因组数据时特别常见,用Pandas就能轻松实现你的目标。

步骤说明

核心思路是先把逗号分隔的字符串转为数值列表,再通过explode方法将列表拆分成单独的行,同时保证exonStart和exonEnds的对应关系不混乱。

具体代码实现

首先构造你的原始DataFrame(如果已经有了可以跳过这一步):

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'chrom': ['chr1', 'chr1', 'chr2'],
    'exonStart': ['100,200,300', '500,700', '50,60,70,80'],
    'exonEnds': ['110,210,310', '600,800', '55,65,75,85'],
    'name': ['gen1', 'gen2', 'gen3']
})

然后执行拆分操作:

# 1. 将逗号分隔的字符串转为整数列表
df['exonStart'] = df['exonStart'].str.split(',').apply(lambda x: [int(i) for i in x])
df['exonEnds'] = df['exonEnds'].str.split(',').apply(lambda x: [int(i) for i in x])

# 2. 同时对两列进行explode,拆分出每行对应一个外显子
df_exploded = df.explode(['exonStart', 'exonEnds'], ignore_index=True)

输出结果

运行后打印df_exploded就能得到你想要的格式:

chrom exonStart exonEnds  name
0  chr1       100      110  gen1
1  chr1       200      210  gen1
2  chr1       300      310  gen1
3  chr1       500      600  gen2
4  chr1       700      800  gen2
5  chr2        50       55  gen3
6  chr2        60       65  gen3
7  chr2        70       75  gen3
8  chr2        80       85  gen3

小提示

  • 使用explode时同时传入两个列名是关键,这样能确保每个外显子的起始和终止坐标严格对应;
  • ignore_index=True会重置结果的索引,让输出更整洁;
  • 如果你的原始数据中坐标是浮点型,把int换成float即可。

内容的提问来源于stack exchange,提问作者Thedam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:06:48