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

Pandas DataFrame中NPC列标签不唯一的ValueError问题求助

解决Pandas DataFrame列标签‘NPC’不唯一的ValueError问题

问题背景

处理HOMER软件优化结果的Pandas DataFrame时,执行排序选列代码触发ValueError: Column label 'NPC' is not unique错误,已尝试去除重复列但问题仍存在。

已尝试操作

  • 去除重复列:
homer_results.columns = homer_results.columns.str.strip()
homer_results = homer_results.loc[:, ~homer_results.columns.duplicated()]
  • 手动检查DataFrame确认存在重复列名
  • 报错代码:
optimal_solutions = homer_results[['NPC'] + target_columns].sort_values(by='NPC').head(10)

解决方案

1. 先确认去重操作是否生效

运行以下代码验证当前列名的重复状态:

# 打印所有列名列表
print(homer_results.columns.tolist())
# 统计重复列的数量
print("重复列总数:", homer_results.columns.duplicated().sum())

2. 彻底清洗列名(处理隐藏差异)

如果仍存在重复,可能是列名包含大小写差异、全角空格或不可见字符,执行更彻底的列名清洗:

# 统一转为大写+移除所有空白字符(含全角空格)
homer_results.columns = homer_results.columns.str.upper().str.replace(r'\s+', '', regex=True)
# 保留第一个出现的列,删除后续重复列
homer_results = homer_results.loc[:, ~homer_results.columns.duplicated(keep='first')]

3. 给重复列添加区分后缀

如果需要保留多列但避免名称冲突,可自动给重复列加序号后缀:

from collections import defaultdict

col_counter = defaultdict(int)
new_col_names = []
for col in homer_results.columns:
    col_counter[col] += 1
    if col_counter[col] > 1:
        new_col_names.append(f"{col}_{col_counter[col]}")
    else:
        new_col_names.append(col)
homer_results.columns = new_col_names

之后可根据重命名后的列名(如NPC_1)执行排序选列操作。

4. 通过列索引定位(绕过列名重复问题)

直接通过列的位置来选择和排序,避免列名冲突:

# 获取所有名为'NPC'的列索引
npc_col_positions = homer_results.columns.get_loc('NPC')
# 取第一个NPC列,结合目标列的索引进行筛选排序
target_col_positions = [homer_results.columns.get_loc(col) for col in target_columns]
optimal_solutions = homer_results.iloc[:, [npc_col_positions[0]] + target_col_positions]\
    .sort_values(by=homer_results.columns[npc_col_positions[0]]).head(10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:07:08