2017-10-09 71 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