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

Pandas按分隔符拆分并展开id列失败,求问题排查与解决

问题分析与解决方法

一、初始代码的语法错误

你定义DataFrame时存在两处语法问题,会直接导致代码无法正常运行:

  • 'index'的值应为列表[1, 2],你误写为1 , 2](缺少左方括号)
  • 'song'键值对末尾缺少逗号,破坏了字典的结构

修正后的DataFrame定义代码:

import pandas as pd

df = pd.DataFrame({
    'index': [1, 2],
    'artist': ['Elton John', 'Biffy Clyro'],
    'song': ['Rocket Man', 'Bubbles'],
    'id': ['B12, U6, Z5', 'H91, D293, P292']
})

二、行展开失败的原因及修正

1. 第一种写法的问题

你执行:

df['id'] = df['id'].str.split(", ")
df.explode('id')

df.explode('id')会返回新的展开后DataFrame,但你没有将这个结果赋值给原变量或新变量,原df不会被修改,所以看起来没有行展开效果。

2. 第二种链式写法的问题

你执行:

df['id'] = df['id'].str.split(", ").explode('id')

这里的错误在于:str.split()返回的是包含列表的Series,调用explode()时(Series的explode方法不需要传参数),会生成一个长度大于原DataFrame的Series。直接赋值回df['id']时,Pandas会按索引匹配,仅保留原索引对应的第一个元素,所以你只看到每行的第一个id值。

正确的实现方式

方式一:分步赋值

# 拆分id列为列表
df['id'] = df['id'].str.split(", ")
# 将展开后的结果赋值给原df,覆盖旧数据
df = df.explode('id')
# 可选:重置索引,避免重复索引
df = df.reset_index(drop=True)

方式二:链式一步完成

df = df.assign(id=df['id'].str.split(", ")).explode('id', ignore_index=True)

执行后即可得到你预期的每行对应一个id值的表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:04:59