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

Python Pandas:如何拆分并展开DataFrame的多元素INFO列?

问题描述

现有如下结构的Pandas DataFrame:

CHR START   END INFO
2547    X   153595089   153595228   FLNA_NM_001110556.2_ex05,FLNA_NM_001456.4_ex05
2548    X   153595754   153595922   FLNA_NM_001110556.2_ex04,FLNA_NM_001456.4_ex04
2549    X   153595998   153596116   FLNA_NM_001110556.2_ex03,FLNA_NM_001456.4_ex03
2550    X   153596199   153596468   FLNA_NM_001110556.2_ex02,FLNA_NM_001456.4_ex02
2551    X   153599230   153599623   FLNA_NM_001110556.2_ex01,FLNA_NM_001456.4_ex01

对应的字典形式为:

{'CHR': ['X', 'X', 'X', 'X', 'X'],
 'START': [153595089, 153595754, 153595998, 153596199, 153599230],
 'END': [153595228, 153595922, 153596116, 153596468, 153599623],
 'INFO': ['FLNA_NM_001110556.2_ex05,FLNA_NM_001456.4_ex05',
  'FLNA_NM_001110556.2_ex04,FLNA_NM_001456.4_ex04',
  'FLNA_NM_001110556.2_ex03,FLNA_NM_001456.4_ex03',
  'FLNA_NM_001110556.2_ex02,FLNA_NM_001456.4_ex02',
  'FLNA_NM_001110556.2_ex01,FLNA_NM_001456.4_ex01']}

需求:将INFO列的每个单元格内容按逗号拆分为列表后展开,使每个元素单独占一行,其余列内容保持对应(INFO列每个单元格可能含1个或2个元素)。

尝试的代码:

WRGL4_hg19.assign(tmp=WRGL4_hg19["INFO"].str.split()).explode("INFO").reset_index(drop=True)

未得到预期结果:输出中INFO列仍为原始多元素值,新增的tmp列仅含单个元素。预期输出示例:

CHR START   END INFO
0   X   153595089   153595228   FLNA_NM_001110556.2_ex05
0   X   153595089   153595228   FLNA_NM_001456.4_ex05   
1   X   153595754   153595922   FLNA_NM_001110556.2_ex04
1   X   153595754   153595922   FLNA_NM_001456.4_ex04
...
正确实现方法

错误原因

你尝试的代码中,assign(tmp=WRGL4_hg19["INFO"].str.split())是把拆分后的列表存入新列tmp,但后续explode("INFO")是对原始未拆分的INFO列操作,因此无法实现展开效果。

方案一:直接拆分并展开INFO列

直接对INFO列执行拆分替换,再展开该列,无需临时列:

# 按逗号拆分INFO列为列表,替换原列后展开
result = WRGL4_hg19.assign(INFO=WRGL4_hg19["INFO"].str.split(",")).explode("INFO").reset_index(drop=True)

方案二:使用拆分+堆叠的链式写法

也可以用更灵活的链式调用实现:

# 拆分INFO列为多列,堆叠后合并回原数据
result = (WRGL4_hg19["INFO"]
          .str.split(",", expand=True)
          .stack()
          .reset_index(level=1, drop=True)
          .to_frame("INFO")
          .join(WRGL4_hg19.drop("INFO", axis=1))
          .reset_index(drop=True))

效果验证

执行上述任意代码后,会得到预期的展开结果:每个INFO元素单独占一行,CHR、START、END列的内容与原行完全对应。

内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:27:08