📜  Python Pandas-面板(1)

📅  最后修改于: 2023-12-03 15:18:57.898000             🧑  作者: Mango

Python Pandas-面板

Pandas 是一个开放源码数据分析库,提供了数据分析、数据清洗和数据可视化的高效操作工具。在 Pandas 中,面板(Panel)是一个三维数据结构,类似于一个带标签的 NumPy 数组。

创建面板

要创建一个 Pandas 面板,可以使用 Pandas 的 Panel 构造函数,将 NumPy 3D 数组或 3D dict 作为参数传递进去。这里是一个简单的示例:

import pandas as pd
import numpy as np

data = np.random.rand(2, 4, 3)
p = pd.Panel(data, items=['item1', 'item2'], major_axis=[1, 2, 3, 4], minor_axis=['a', 'b', 'c'])
print(p)

该代码将创建一个 2 x 4 x 3 的面板,其项目(items)为 item1item2,其主要轴(major axis)为 1234,其次要轴(minor axis)为 abc。输出如下:

<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 3 (minor_axis)
Items axis: item1 to item2
Major_axis axis: 1 to 4
Minor_axis axis: a to c
访问数据

Pandas 中可以使用以下方式访问面板中的数据:

  • 使用列名、索引和项目名来提取面板中的数据。
  • 使用.loc、.iloc 和 .ix 存取器,并为每个轴提供标签或整数位置。
  • 使用 Panel.items、Panel.major_axis、Panel.minor_axis 存取器,表示每个轴上的标签。

下面是一些示例:

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)

# 提取面板数据
print(p['Item1'])

# 使用.ix 存取器
print(p.ix[:, :, 'a'])

# 使用存取器
print(p.items)
print(p.major_axis)
print(p.minor_axis)

输出如下:

<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

          0         1         2
0  0.236206 -1.350803 -1.043356
1 -0.740145 -1.175801  0.742047
2 -0.937536 -1.456460 -0.021951
3 -0.608389 -0.909488 -0.206090

          Item1     Item2
0 -1.028442    NaN
1  0.276255    NaN
2  0.363232    NaN
3  0.444544    NaN

Index(['Item1', 'Item2'], dtype='object')
Int64Index([0, 1, 2, 3], dtype='int64')
Int64Index([0, 1, 2], dtype='int64')
面板运算

Pandas 面板支持许多常见的 NumPy 三维数组运算,例如插入、切片和连接。

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

p1 = pd.Panel(data)
p2 = pd.Panel(data)

# 面板加法
p3 = p1 + p2
print(p3)

# 面板减法
p4 = p1 - p2
print(p4)

# 面板切片
print(p1.ix[:, :, 1])

输出如下:

<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
# 各项相加

<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
# 各项相减

          Item1     Item2
0 -1.174750    NaN
1 -0.613719    NaN
2  1.701500    NaN
3 -1.119071    NaN
# 切片
存储面板

可以使用 HDF5、Excel、CSV 等格式来存储 Pandas 面板。下面是一个简单的 CSV 存储示例:

import pandas as pd
import numpy as np

data = np.random.rand(2, 4, 3)
p = pd.Panel(data, items=['item1', 'item2'], major_axis=[1, 2, 3, 4], minor_axis=['a', 'b', 'c'])

p.to_csv('panel.csv')
p_from_csv = pd.read_csv('panel.csv', header=[0, 1, 2], index_col=[0])
print(p_from_csv)

这里使用 to_csv 将面板写入 CSV 文件,然后使用 read_csv 将其读回到 Pandas 面板中。注意设置头和索引标签。