2017-06-18 18 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

は、これが最良の答えではないかもしれないが、私はただ一つのエントリで新しいパネルを作成し、要素をドロップすることができました2つのパネルを連結します。値を更新するのは遠いもののようですが、うまくいきます。

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]: 
関連する問題