Pandas 中的一系列 DataFrame 和面板之间的区别

Nyx*_*nyx 5 python python-2.7 pandas

pandas.Series由多个组成的a 是否pandas.DataFrame类似于 a pandas.Panel?乍一看,它们的数据结构似乎非常相似。您何时决定使用一系列数据框,何时使用面板?

chr*_*isb 1

APanel通常会更有内存/计算效率 - a Seriesof与任意 python 对象的DataFramesa 没有太大区别- 而且api 应该使操作更容易。SeriesPanel

In [18]: dfs = {i:pd.DataFrame({'a':np.linspace(0,100, 10000), 
                                'b':np.linspace(0,100, 10000)}) 
                for i in range(1000)}

In [19]: s = pd.Series(dfs)

In [20]: pnl = pd.Panel(dfs)

In [21]: pnl.sum()
Out[21]: 
      0       1       2       3       4       5       6       7       8    \
a  500000  500000  500000  500000  500000  500000  500000  500000  500000   
b  500000  500000  500000  500000  500000  500000  500000  500000  500000   

      9     ...       990     991     992     993     994     995     996  \
a  500000   ...    500000  500000  500000  500000  500000  500000  500000   
b  500000   ...    500000  500000  500000  500000  500000  500000  500000   

      997     998     999  
a  500000  500000  500000  
b  500000  500000  500000  

# equivalent with a series of frames
In [24]: s.apply(lambda x: x.sum()).T

In [22]: %timeit pnl.sum()
10 loops, best of 3: 23.4 ms per loop

In [25]: %timeit s.apply(lambda x: x.sum()).T
10 loops, best of 3: 123 ms per loop
Run Code Online (Sandbox Code Playgroud)

请注意,它Panel比 api 的其余部分使用得更少pandas- 取决于您想要完成的任务,您可能会更幸运地使用 aDataFrameMultiIndex更专门用于多维数据的东西,例如xray