我对Pandas很新,当前尝试在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中的每个条目都是一个单独的数据框架。
我的想法是这样实现:
big_DataFrame['Signal 1'].loc['Name 1']
但这会导致ValueError:
与DataFrame不兼容的索引器
是否有可能在Pandas中拥有这个嵌套的DataFrame?
尼科
docs说只有Series
可以在DataFrame
内。然而,通过DataFrames
似乎也有效。这是一个假设没有列在MultiIndex
中的exaple:
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
如果嵌套的数据帧不能正常工作,您可以实现某种存储在big_df
中的指针,这些指针允许您访问存储在别处的信号数据帧。
你应该使用而不是big_DataFrame['Signal 1'].loc['Name 1']
big_DataFrame.loc['Name 1','Signal 1']
在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