Pandas Concat Giving" InvalidIndexError:重新索引仅对具有唯一值的Index对象有效#34;错误

时间:2017-04-26 02:51:03

标签: python python-2.7 python-3.x pandas data-analysis

我想要使用两种不同的dfs:

pd.concat([df1, df2], 1)

最终结果是以日期为索引和所有列的df。

According to pandas documentation,这应该有效。它工作正常。但现在它不是,我不明白为什么。

DF1:

        gbp_open  gbp_high gbp_low gbp_close gbp_volume
date                    
2017-03-13  0.8217  0.82246 0.81627 0.8216  000
2017-03-10  0.8224  0.82366 0.82055 0.82255 000
2017-03-09  0.82139 0.82364 0.82    0.8212  000
2017-03-08  0.81943 0.82372 0.8186  0.81937 000
2017-03-07  0.817   0.82163 0.8163  0.8168  000
2017-03-06  0.81351 0.81659 0.8132  0.813   000
2017-03-03  0.8147  0.81854 0.8141  0.81468 000
2017-03-02  0.81492 0.81561 0.81264 0.81485 000
2017-03-01  0.80779 0.81402 0.80629 0.80788 000
2017-02-28  0.80403 0.8059  0.80183 0.8039  000

和df2:

          inr_open  inr_high inr_low inr_close inr_volume
date                    
2017-03-13  66.485  66.58   66.11   66.485  000
2017-03-10  66.71   66.77   66.5398 66.6805 000
2017-03-09  66.815  66.853  66.60   66.765  000
2017-03-08  66.625  66.83   66.613  66.6162 000
2017-03-07  66.645  66.695  66.58   66.6647 000
2017-03-06  66.71   66.78   66.60   66.773  000
2017-03-03  66.845  66.885  66.74   66.8451 000
2017-03-02  66.69   66.858  66.67   66.858  000
2017-03-01  66.705  66.89   66.7046 66.7051 000
2017-02-28  66.735  66.808  66.59   66.6932 000

我尝试了几种不同的解决方案,但没有一种能够满足我的需求,这就是将这两种解决方案结合起来。

编辑:奇怪的是,我在不同的数据集上使用了完全相同的代码(但操作相同),并且它没有任何问题。

编辑2:也许这会有所帮助。我使用了df1.join(df2,how =' outer')并且它工作正常。那么几乎很好。当我检查任何重复值时,有一个日期显示四个(它恰好是昨天 - 这可以解释为什么它是最近的问题)。

这有助于解决这个问题吗?

xdf.index.value_counts()

2017-04-24    4
2016-11-14    1
2011-03-28    1
2011-09-19    1
2011-09-13    1
2013-12-25    1
2012-07-12    1
2011-08-08    1
2016-11-22    1

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你的编辑基本上回答了这个问题:既然你的索引有多个相同的值,如果你想根据索引进行连接,那么如何对齐索引是不明确的,所以熊猫会引发错误:

所以这很有效,因为索引是唯一的:

df1 = pd.DataFrame(index=[0,1,2],columns=['A'],data=[19.,2.,-4.])
df2 = pd.DataFrame(index=[2,1,0],columns=['B'],data=[17.,28.,9.])
df3 = pd.concat(objs=[df1,df2],axis=1)

但是以下内容会引发与您相同的错误,因为不清楚这两个索引中的哪一个具有值" 1"从第一个数据帧开始,应与哪个索引的值对齐" 1"来自第二个数据框:

df3 = pd.DataFrame(index=[1,0,1],columns=['A'],data=[19.,2.,-4.])
df4 = pd.DataFrame(index=[0,1,1],columns=['B'],data=[17.,28.,9.])
df5 = pd.concat(objs=[df3,df4],axis=1)

尝试执行df5将为您提供InvalidIndexError:重新索引仅对您找到的唯一值Index对象有效。

答案 1 :(得分:0)

在为两个数据框都重叠之前尝试打印dataframe.index。 如果不匹配,请使用reset_index()重置索引。然后尝试串联。

它将起作用。