2017-04-27 55 views
0

我已經創建了2個數據幀。一個叫做'dfmas'的收盤價和移動平均線;爲什麼我在連接兩個熊貓數據幀時獲得NaN值>

  PX_OPEN PX_HIGH PX_LOW PX_LAST  ma5  ma8  ma21 
Date                   

12/19/2016 117.90 118.03 116.55 117.09 117.086 116.22625 114.231905 
12/20/2016 117.09 118.24 116.99 117.86 117.620 116.70375 114.567143 
12/21/2016 117.86 118.07 117.11 117.55 117.722 116.98250 114.872381 
12/22/2016 117.55 117.88 117.27 117.54 117.594 117.29750 115.111429 

我已經然後創建了另一個熊貓數據幀「ma5xdf」表示我,當5日均線上升(+1)和下降沿(-1)或電平(0);

ma5x 
0  0 
1  0 
2  0 
3  0 
4  -1 
5  -1 
6  -1 
7  -1 
8  1 
9  1 

我想那麼這兩個dataframes合併爲1,但我得到NaN值的負荷上升/下降第5天,並在原來的「dfmas」數據的尾部。我在用着;

dfx = pd.concat([dfmas, ma5xdf], axis =1) 
print(dfx.tail(4)) 

我得到了;

 PX_OPEN PX_HIGH PX_LOW PX_LAST ma5 ma8 ma21 ma5x 
1845  NaN  NaN  NaN  NaN NaN NaN NaN 1.0 
1846  NaN  NaN  NaN  NaN NaN NaN NaN 1.0 
1847  NaN  NaN  NaN  NaN NaN NaN NaN 1.0 
1848  NaN  NaN  NaN  NaN NaN NaN NaN 1.0 

任何與代碼的幫助將被感激地接受,謝謝!

+1

'pd.concat'是'index'(帶有'axis = 0',默認值)或'columns'(帶有'axis = 1')的合併。當您與其索引(或列)未對齊的另一個對象連接時,它會生成外部連接。您需要使用'dfmas'中的索引來創建'ma5xdf' – piRSquared

+0

輸入數據的期望輸出是什麼? 2個DF似乎有不同的行數。 – Allen

+0

期望的輸出是將ma5xdf與dfmas對齊。 5日均線如何上漲或下跌與dfmas中的實際5日均線相比。我不知道如何將它索引到dfmas,或者如何對齊,因爲df5xdf有1個較少的行? – Bugsy

回答

1

如果您希望在第一個數據框(dfmas)的末尾添加第二個數據框(ma5xdf)的列,您可以執行此操作。

ma5xdf['ma5x'] = ma5xdf['ma5x'].astype(float) 
dfmas['ma5x'] = ma5xdf['ma5x'] 

一個簡單而精確的解決方案。

我看到您的索引設置爲dfmas中的date列。

所以另一種方法。

dfmas.reset_index(drop=True,inplace=True) 
ma5xdf['ma5x'] = ma5xdf['ma5x'].astype(float) 
dfmas['ma5x'] = ma5xdf['ma5x'] 
dfmas = dfmas.set_index('Date') 
+0

現在通過使用第一種方法連接熊貓數據幀,謝謝。但它不會接受'日期'作爲索引?!?此外,dfmas浮動正確填充,但不是'ma5x'。 – Bugsy

+0

在你將數據框的列從ma5xdf複製到dfmax之前,@Bugsy嘗試'ma5xdf ['ma5x']。astype(float)'。你的第二個查詢,該日期無法設置索引,你能告訴你的列名,我猜'日期'不是一個列名,所以它可能會顯示索引錯誤。請參閱編輯。 – Shubham

+0

真棒,非常感謝所有,非常感謝! – Bugsy