Pandas 面板(Panel)是3维数据的存储结构,面板数据一词来源于计量经济学,部分源于名称:Pandas
– pan(el)-da(ta)-s
。
Panel
相当于一个存储 DataFrame
的字典,3个轴(axis
)分别代表意义如下:
axis 0 |
items | item 对应一个内部的数据帧(DataFrame) |
axis 1 |
major_axis | 每个数据帧(DataFrame)的索引行 |
axis 2 |
minor_axis | 每个数据帧(DataFrame)的索引列 |
pandas.Panel()
可以使用以下构造函数创建 Panel
pandas.Panel(data, items, major_axis, minor_axis, dtype, copy)
构造函数的参数说明如下:
参数 | 说明 |
---|---|
data |
支持多种数据类型,如:ndarray ,series ,map ,lists ,dict ,constant 和其他数据帧(DataFrame ) |
items |
axis=0 |
major_axis |
axis=1 |
minor_axis |
axis=2 |
dtype |
每列的数据类型 |
copy |
是否复制数据,默认为false |
创建 Panel
可以使用多种方式创建面板,如:从 ndarrays 创建,或从 DataFrames 字典创建
创建一个空 Panel
可以使用Panel
的构造函数创建一个空面板,如下所示:
#creating an empty panel
import pandas as pd
p = pd.Panel()
print (p)
执行结果如下:
<class 'pandas.core.panel.Panel'>
Dimensions: 0 (items) x 0 (major_axis) x 0 (minor_axis)
Items axis: None
Major_axis axis: None
Minor_axis axis: None
从3D ndarray创建 Panel
# creating an empty panel
import pandas as pd
import numpy as np
data = np.random.rand(2, 4, 5)
p = pd.Panel(data)
print (p)
执行结果如下:
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 5 (minor_axis)
Items axis: 0 to 1
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 4
从 DataFrame 字典创建 Panel
#creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)),
'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print (p)
执行结果如下:
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 3 (minor_axis)
Items axis: Item1 to Item2
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 2
从 Panel 中读取数据
要从 Panel 中读取数据,可以使用以下方式:
- Items
- Major_axis
- Minor_axis
使用 Items
# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)),
'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print (p['Item1'])
执行结果如下:
0 1 2
0 -0.986684 -0.220708 -0.485787
1 -0.164544 0.412970 1.088492
2 -0.344780 0.977971 2.520853
3 0.009898 0.573343 0.232600
上面示例有两个数据项(Item1
和 Item2
),这里只检索Item1
,结果获得4
行和3
列的数据帧(DataFrame
)。
使用 major_axis
可以使用panel.major_axis(index)
方法访问数据,参考示例如下:
# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)),
'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print (p.major_xs(1))
执行结果如下:
Item1 Item2
0 1.152541 0.581985
1 1.139998 -0.253684
2 0.637131 NaN
使用 minor_axis
可以使用panel.minor_axis(index)
方法访问数据,参考示例如下:
# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)),
'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print (p.minor_xs(1))
执行结果如下:
Item1 Item2
0 -0.854895 0.904276
1 -0.492248 -0.386763
2 0.487797 -1.398289
3 1.224335 -0.300087