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

使用Pandas处理JSON数据时,拆分assignees与labels列遇ValueError问题求助

解决Pandas中explode时的"columns must be unique"错误及列拆分/展开需求

首先,咱们先搞清楚这个ValueError: columns must be unique错误的根源:Pandas绝对不允许DataFrame里出现重复的列名,不管是原数据自带的,还是你处理过程中生成的,只要列名重复就会触发这个错误。接下来咱们分两种情况解决你的问题:

一、处理assignees嵌套字典列(拆分为独立列)

你的assignees列是嵌套字典的列表,直接explode后还要把字典拆成单独的列,这里要注意别让新生成的列名和原DataFrame里的列重名(比如原数据如果已经有id列,那拆出来的assignee id就得改个名字)。具体步骤如下:

import pandas as pd

# 1. 先把assignees列炸开,每个字典单独占一行
df_exploded = df.explode('assignees', ignore_index=True)

# 2. 把炸开后的字典列拆成单独的列,给新列加前缀避免重名
assignee_details = df_exploded['assignees'].apply(pd.Series).add_prefix('assignee_')

# 3. 把拆分后的列和原数据合并,同时删掉原来的assignees列
final_assignee_df = pd.concat([df_exploded.drop('assignees', axis=1), assignee_details], axis=1)

# 可选:把web_url重命名成你想要的URL
final_assignee_df = final_assignee_df.rename(columns={'assignee_web_url': 'assignee_URL'})

这样处理后,你就能得到assignee_id、assignee_username这类独立列,完全不会和原数据的列名冲突。

二、处理labels字符串列表列(按行展开)

处理labels时出现同样的错误,大概率是你的原DataFrame里存在重复的列名(比如有两个列都叫labels?)。先做个前置检查,然后再炸开:

# 先检查并移除重复列(保留第一次出现的列)
df = df.loc[:, ~df.columns.duplicated()]

# 然后炸开labels列,每个标签单独占一行,自动重复对应的数据行
final_labels_df = df.explode('labels', ignore_index=True)

执行完上面的代码,labels里的每个值就会单独成行,对应的原数据行也会自动重复,完全符合你想要的效果。

额外提醒

如果执行完上述代码还是报错,建议先打印df.columns看看有没有重复列名,或者检查原JSON数据里是不是有重复的键(比如同一个对象里出现两次id),这些都会导致列名重复的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:29:07