只有在唯一值索引对象的情况下才可以重新索引。

3

我运行了这段代码

esg_fm_barron = pd.concat([barron_clean.drop(columns = "10 year return", inplace = False),ESG_fixed.drop(columns = 'Name',inplace = False), financial_clean.drop(columns = 'Name',inplace = False)], axis = 'columns', join = 'inner')
esg_fm_barron.rename(columns={'Average (Current)': "Total ESG Score"}, inplace=True)
esg_fm_barron.head(3)

但是我收到了这个错误:重新索引仅适用于具有唯一值的索引对象,有人知道解决方案吗?谢谢。
1个回答

11

当您运行pd.concat时,每个源DataFrame必须具有唯一索引。

首先确定哪个源DataFrame具有非唯一索引。 对于每个源DataFrame(假设为df),请运行:

df.index.is_unique

这个是一个属性,不是方法,所以不需要加括号。

false 的结果意味着这个 DataFrame 的索引是非唯一的。然后删除具有重复索引值的行:

df = df.loc[~df.index.duplicated(keep='first')]

为了不丢失原始数据,可能您应该将结果保存在一个新的临时DataFrame下,然后使用这些临时DataFrame进行合并。

我运行了这个,它工作了 :D : ' esg_fm_barron = pd.merge(pd.merge(barron_clean,ESG_fixed,on='Ticker'),financial_clean,on='Ticker') esg_fm_barron.drop(['Name', '10 year return','Name_y'] , axis=1, inplace=True) esg_fm_barron.rename(columns={'Average (Current)': "Total ESG Score"}, inplace=True) esg_fm_barron.rename(columns={'Name_x': "Name"}, inplace=True) esg_fm_barron.head()' - Nader bouchnag
只是一个提醒,在那里,没有任何方法.is_unique()。实际上,它是索引对象的属性(可能实际上是一个属性),因此测试应该是df.index.is_unique - Iqigai
1
你说得对。我改正了我的答案。 - Valdi_Bo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接