2017-06-18 77 views
0

如果我複製作爲面板元素的數據框,我可以使用append方法成功更新它。但是,我無法成功更新面板元素的數據框。我如何更新面板元素的數據框?爲什麼不能將行追加到面板對象內的數據框?

這裏是複製成功追加。

In [204]: pdata 
Out[204]: 
<class 'pandas.core.panel.Panel'> 
Dimensions: 696 (items) x 1 (major_axis) x 6 (minor_axis) 
Items axis: 01-Apr-2014 to 31-Oct-2014 
Major_axis axis: 0 to 0 
Minor_axis axis: Date to Start Price 

In [198]: test = pdata['20-Aug-2014'] 

In [199]: test 
Out[199]: 
      Date Deal End Price Security Start Position Start Price 
0 20-Aug-2014 PE  25 CU FP    3  17.4 


In [200]: port.ix[233] 
Out[200]: 
Date    20-Aug-2014 
Security    CU FP 
Deal      PE 
Start Price    17.4 
Start Position    3 
End Price     25 
Name: 233, dtype: object 


In [201]: test.append(port.ix[233], ignore_index=True) 
Out[201]: 
      Date Deal End Price Security Start Position Start Price 
0 20-Aug-2014 PE  25 CU FP    3  17.4 
1 20-Aug-2014 PE  25 CU FP    3  17.4 

In [202]: test = test.append(port.ix[233], ignore_index=True) 

In [203]: test 
Out[203]: 
      Date Deal End Price Security Start Position Start Price 
0 20-Aug-2014 PE  25 CU FP    3  17.4 
1 20-Aug-2014 PE  25 CU FP    3  17.4 

在這裏,我嘗試了面板的元素同樣的事情,但它不工作:

In [204]: pdata 
Out[204]: 
<class 'pandas.core.panel.Panel'> 
Dimensions: 696 (items) x 1 (major_axis) x 6 (minor_axis) 
Items axis: 01-Apr-2014 to 31-Oct-2014 
Major_axis axis: 0 to 0 
Minor_axis axis: Date to Start Price 

In [206]: pdata['20-Aug-2014'] = pdata['20-Aug-2014'].append(port.ix[233], ignore_index=True) 

In [207]: pdata['20-Aug-2014'] 
Out[207]: 
      Date Deal End Price Security Start Position Start Price 
0 20-Aug-2014 PE  25 CU FP    3  17.4 

在這裏,我嘗試分配數據幀的修改拷貝到元素面板,這也不起作用:

In [208]: pdata['20-Aug-2014'] = test 

In [209]: pdata['20-Aug-2014'] 
Out[209]: 
      Date Deal End Price Security Start Position Start Price 
0 20-Aug-2014 PE  25 CU FP    3  17.4 

如何我可以更新數據框是面板的元素嗎?

感謝,

加託

回答

0

這可能不是最佳答案,讓我很感興趣,如果別人有更好的方法,但是我發現我可能下降的元素,使一個新的面板只是一個入口然後連接兩個面板。似乎很長的時間來更新價值,但它的工作原理。

In [204]: pdata 
Out[204]: 
<class 'pandas.core.panel.Panel'> 
Dimensions: 696 (items) x 1 (major_axis) x 6 (minor_axis) 
Items axis: 01-Apr-2014 to 31-Oct-2014 
Major_axis axis: 0 to 0 
Minor_axis axis: Date to Start Price 
In [209]: pdata['20-Aug-2014'] 
Out[209]: 
      Date Deal End Price Security Start Position Start Price 
0 20-Aug-2014 PE  25 CU FP    3  17.4 

In [211]: pdatatmp = pdata.drop('20-Aug-2014') 

In [212]: pdatatmp 
Out[212]: 
<class 'pandas.core.panel.Panel'> 
Dimensions: 695 (items) x 1 (major_axis) x 6 (minor_axis) 
Items axis: 01-Apr-2014 to 31-Oct-2014 
Major_axis axis: 0 to 0 
Minor_axis axis: Date to Start Price 

In [215]: pdataupd = pd.Panel({'20-Aug-2014': test}) 

In [220]: pdata = pd.concat([pdatatmp, pdataupd]) 

In [222]: pdata 
Out[222]: 
<class 'pandas.core.panel.Panel'> 
Dimensions: 696 (items) x 2 (major_axis) x 6 (minor_axis) 
Items axis: 01-Apr-2014 to 20-Aug-2014 
Major_axis axis: 0 to 1 
Minor_axis axis: Date to Start Price 

In [223]: pdata['20-Aug-2014'] 
Out[223]: 
      Date Deal End Price Security Start Position Start Price 
0 20-Aug-2014 PE  25 CU FP    3  17.4 
1 20-Aug-2014 PE  25 CU FP    3  17.4 

In [224]: 
+0

原來這是非常低效的,甚至幾千更新永遠運行,所以我感興趣,如果任何人有更好的答案。 – gatomulato

0

首先回答的作品,但並不完全符合市場預期。該元素已更新,但我發現該面板期望其所有組件數據框都具有相同的維度,因此在answer [0]中使用方法concat會在所有其他元素數據框中插入空記錄。

如果我們簡單地放棄面板構造並使用數據框的字典,那麼我們就具有了我們所需的靈活性,並且更新可以高效地工作。

In [98]: pdata = {k: pstub for k in pdates['Dates'].values} 

In [106]: port.ix[7] 
Out[106]: 
Date    10-Jan-2014 
Security    LIFE US 
Deal     TMO US 
Start Price    75.8 
Start Position   7.5 
End Price    76.1 
Name: 7, dtype: object 

In [107]: pdata['10-Jan-2014'] = pdata['10-Jan-2014'].append(port.ix[7], ignore_index=True) 

In [108]: pdata['09-Jan-2014'] 
Out[108]: 
Empty DataFrame 
Columns: [Date, Deal, End Price, Security, Start Position, Start Price] 
Index: [] 

In [109]: pdata['10-Jan-2014'] 
Out[109]: 
      Date Deal End Price Security Start Position Start Price 
0 10-Jan-2014 TMO US  76.1 LIFE US    7.5   75.8 

In [110]: 
相關問題