【问题标题】:Reindexing only valid with uniquely valued Index objects重新索引仅对具有唯一值的索引对象有效
【发布时间】:2022-07-15 13:59:15
【问题描述】:

我运行这段代码

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)

但是得到这个错误:重新索引只对唯一值的索引对象有效 有人知道解决方案吗?谢谢

【问题讨论】:

    标签: pandas indexing merge concatenation drop


    【解决方案1】:

    当你运行 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()'
    • 请注意,没有任何方法.is_unique()。实际上它是索引对象的一个​​属性(实际上可能是一个属性)所以测试应该是df.index.is_unique
    • 你是对的。我更正了我的答案。
    猜你喜欢
    • 2023-04-02
    • 2021-07-22
    • 2021-05-22
    • 2018-10-27
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多