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

使用assign时报ValueError: cannot reindex on an axis with duplicate labels的原因

解决ValueError: cannot reindex on an axis with duplicate labels错误

问题场景

你尝试执行以下代码,以_(含前后可选空白)为分隔符拆分engine_type列的值:

df = pd.read_csv("/content/sample_data/used_cars.csv")
dds = df.assign(engines_type= lambda x: x['engine_type'].str.split(r'\s*_\s*').explode()).reset_index()

运行时触发错误:

ValueError: cannot reindex on an axis with duplicate labels

错误原因

  • 核心问题是原DataFrame(df)的索引存在重复值。explode()操作会让拆分后的每一行继承原行的索引,导致新生成的中间DataFrame索引出现大量重复项。
  • 后续调用的reset_index()默认会保留原索引作为新列(列名为index),同时尝试创建新的连续整数索引。但pandas内部的重新索引逻辑要求操作对象的索引唯一,因此触发该报错。

解决方法

方法1:重置索引时丢弃原重复索引

在reset_index()中添加drop=True参数,直接生成新的唯一整数索引,不再保留原重复索引:

dds = df.assign(engines_type=lambda x: x['engine_type'].str.split(r'\s*_\s*').explode()).reset_index(drop=True)

方法2:先重置原DataFrame的索引

先将原数据的索引转为唯一整数索引,再执行拆分操作,从根源避免重复索引问题:

df = pd.read_csv("/content/sample_data/used_cars.csv").reset_index(drop=True)
dds = df.assign(engines_type=lambda x: x['engine_type'].str.split(r'\s*_\s*').explode()).reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:02:21