pandas 连接两个具有相同列名的数据帧,返回 InvalidIndexError

问题描述 投票:0回答:1

我有两个具有相同列名的数据框,当我尝试基于一列作为索引来连接它们时,我间歇性地收到 InvalidIndexError 错误,我无法弄清楚为什么。

这是数据表示

adf:

| A| B| C|
|:---- |:------:| -----:|
| abcd| AB| 1.0|
| a| AC| 1.1|
| b| AD| 1.1|
| c| AE| 2.0|

bdf

| A| B| C|
|:---- |:------:| -----:|
| abcd| AB| **1.1**|
| a| AC| 1.1|
| b| **AX**| **1.2**|
| c| **AF**| 2.0|

A 列在两个 dfs 中都没有更改,但 B、C 列可能/可能没有更改。我的最终目标是有一个 df 来比较更改的内容和未更改的内容。

下面的代码片段是我使用过的:

df_all = pd.concat([adf.set_index('A'), bdf.set_index('A')], axis='columns', keys=['cur', 'new'])

当它起作用时,它会返回这种格式的数据

df_all-

忽略 1.0 到 1 和 2.0 到 2,因为我从 Excel 发布了图像

但是,它会间歇性地返回

InvalidIndexError: Reindexing only valid with uniquely valued Index objects
错误,数据(但不是列)发生一些细微的变化。

这可能是什么原因造成的?

此外,如果有任何其他建议以上述格式提供数据,我们将不胜感激。

python pandas dataframe concatenation
1个回答
0
投票

要解决您的问题,请确保在串联之前用作索引的列中没有重复值。在设置索引之前,您可以使用

drop_duplicates()
is_unique

这是

is_unique
的代码:

if adf['A'].is_unique and bdf['A'].is_unique:
    df_all = pd.concat([adf.set_index('A'), bdf.set_index('A')], axis='columns', keys=['cur', 'new'])
else:
    print("'A' must have unique values in both DataFrames.")
© www.soinside.com 2019 - 2024. All rights reserved.