我有两个具有相同列名的数据框,当我尝试基于一列作为索引来连接它们时,我间歇性地收到 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
错误,数据(但不是列)发生一些细微的变化。
这可能是什么原因造成的?
此外,如果有任何其他建议以上述格式提供数据,我们将不胜感激。
要解决您的问题,请确保在串联之前用作索引的列中没有重复值。在设置索引之前,您可以使用
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.")