2017-10-09 75 views
0

我對Pandas頗爲陌生,目前在嘗試在Dataframe中插入Dataframe時遇到了問題。熊貓:在Dataframe中存儲數據幀

我想要做什麼: 我有多個模擬和相應的信號文件,我希望它們都在一個大的DataFrame中。所以我想要一個DataFrame,它具有我所有的模擬參數,並且還有我的信號作爲嵌套的DataFrame。它應該是這個樣子:

SimName | Date | Parameter 1 | Parameter 2 | Signal 1 | Signal 2 | 
Name 1 | 123 | XYZ   | XYZ   | DataFrame | DataFrame | 
Name 2 | 456 | XYZ   | XYZ   | DataFrame | DataFrame | 

哪裏SimName是我的大數據幀和信號1的每個條目和信號2指數是individuall數據幀。

我的想法是實現這個是這樣的:

big_DataFrame['Signal 1'].loc['Name 1'] 

但是,這導致一個ValueError異常:

Incompatible indexer with DataFrame

是否可以在熊貓這種嵌套DataFrames?

尼科

+0

你應該表現出你的初始數據... – IanS

+0

你是什麼意思與初使數據?現在我創建DataFrame並列出所有模擬列表,然後將每個模擬數據添加到另一個 –

+0

爲什麼要在df中存儲df?看看[熊貓小組](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Panel.html)。 – Parfait

回答

0

的​​說,只有Series可以是DataFrame內。但是,通過DataFrames似乎也可以。這裏是一個的exaple假設沒有列在MultiIndex

import pandas as pd 

signal_df = pd.DataFrame({'X': [1,2,3], 
          'Y': [10,20,30]} ) 

big_df = pd.DataFrame({'SimName': ['Name 1','Name 2'], 
         'Date ':[123 , 456 ], 
         'Parameter 1':['XYZ', 'XYZ'], 
         'Parameter 2':['XYZ', 'XYZ'], 
         'Signal 1':[signal_df, signal_df], 
         'Signal 2':[signal_df, signal_df]} ) 

big_df.loc[0,'Signal 1'] 
big_df.loc[0,'Signal 1'][X] 

這導致:

out1: X Y 
     0 1 10 
     1 2 20 
     2 3 30 

out2: 0 1 
     1 2 
     2 3 
     Name: X, dtype: int64 

如果嵌套dataframes都不能正常工作,你可以實現某種形式的指針,你存儲在big_df,允許您訪問其他地方存儲的信號數據幀。

0

相反的big_DataFrame['Signal 1'].loc['Name 1'],你應該使用

big_DataFrame.loc['Name 1','Signal 1'] 
+0

儘管這可能在語法上更加簡潔,但它並不能避免問題。 – rbinnun

0

的 '指針' 在ns63sr's answer末提到可以實現爲一類,比如..

定義:

class df_holder: 
    def __init__(self, df): 
     self.df = df 

設置:

df.loc[0,'df_holder'] = df_holder(df) 

得到:

df.loc[0].df_holder.df