Python Pandas - 面板 (Panel)



面板是一個三維資料容器。“面板資料”一詞源於計量經濟學,並且部分解釋了 pandas 的名稱——pan(el)-da(ta)-s。

Panel 類已棄用,並在最新版本的 pandas 中被移除。表示三維資料的推薦方法是透過 to_frame() 方法在 DataFrame 上使用多級索引,或使用 xarray 包。pandas 提供 to_xarray() 方法來自動執行此轉換。

這三個軸的名稱旨在為描述涉及面板資料的操作提供一些語義含義。它們是:

  • items:軸 0,每個專案對應於內部包含的 DataFrame。

  • major_axis:軸 1,它是每個 DataFrame 的索引(行)。

  • minor_axis:軸 2,它是每個 DataFrame 的列。

pandas.Panel()

可以使用以下建構函式建立一個 Panel:

pandas.Panel(data, items, major_axis, minor_axis, dtype, copy)

建構函式的引數如下:

引數 描述
data 資料採用多種形式,例如 ndarray、series、map、列表、字典、常量以及另一個 DataFrame
items axis=0
major_axis axis=1
minor_axis axis=2
dtype 每列的資料型別
copy 複製資料。預設值,false

建立面板

可以使用多種方法建立面板,例如:

  • 從 ndarrays 建立
  • 從 DataFrame 字典建立

從三維 ndarray 建立

# 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 物件的字典建立

#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)

輸出如下:

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 建構函式建立空面板,如下所示:

#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

從面板中選擇資料

使用以下方法從面板中選擇資料:

  • 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.488224  -0.128637   0.930817
1    0.417497   0.896681   0.576657
2   -2.775266   0.571668   0.290082
3   -0.400538  -0.144234   1.110535

我們有兩個專案,我們檢索了 item1。結果是一個包含 4 行 3 列的 DataFrame,它們分別是Major_axisMinor_axis 維度。

使用 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   0.417497    0.748412
1   0.896681   -0.557322
2   0.576657       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.128637   -1.047032
1    0.896681   -0.557322
2    0.571668    0.431953
3   -0.144234    1.302466

注意:觀察維度的變化。

廣告