2017-04-26 88 views
0

我有兩個不同的DFS,我想用結合:熊貓的毗連給予「InvalidIndexError:重建索引只與唯一值的索引對象有效的」錯誤

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

最終的結果是與日期爲指數DF和所有的cols。

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 

有什麼想法?

+1

我想你最好使用'join'作爲這個 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.join.html – ittus

+0

你試過參數ignore_index = True嗎? – Vaishali

+0

那麼我需要ignore_index,因爲我想將每個日期的數據合併成一行......並加入作品,謝謝!仍然想知道爲什麼上述不工作 - 我直接從文檔中解除它! – Zach

回答

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:Reindexing只對有找到的唯一值索引對象有效。