Numpy 如何高效地从 Numpy 3D 数组中创建 Pandas DataFrame

Numpy 如何高效地从 Numpy 3D 数组中创建 Pandas DataFrame

在本文中,我们将介绍如何使用 NumpyPandasNumpy 3D 数组有效地转换为 Pandas DataFrame。这是数据科学中非常常见的操作,在将数据从各种格式和源中合并到一起并对其进行分析和可视化时,Pandas DataFrame 是不可或缺的。

阅读更多:Numpy 教程

Numpy 和 Pandas 的简介

在我们开始深入研究转换过程之前,让我们简要介绍一下 Numpy 和 Pandas。

NumPy 是Python中进行科学计算的核心库。它提供了一个高级数组对象、广播功能、集成 C/C++和 Fortran 代码的工具,以及众多的科学计算函数。

请看下面的示例。要使用 Numpy,您需要安装它:

import numpy as np

# Create array
arr = np.array([1, 2, 3, 4, 5])

# Print array
print(arr)

结果将是:

[1 2 3 4 5]

另一方面,Pandas 是基于 Numpy 的另一个非常有用的库。它允许用户读取和操作包含标签行和列的表格数据,类似于 SQL 或 Excel 中的表。

要使用 Pandas,您需要使用以下命令安装:

!pip install pandas

然后运行以下代码:

import pandas as pd

# Create dataframe with dictionary
data = {'name': ['John', 'Emma', 'Peter'], 'age': [30, 28, 25]}
df = pd.DataFrame(data)

# Print dataframe
print(df)

结果将是:

    name  age
0   John   30
1   Emma   28
2  Peter   25

看起来还是不错的。接下来,我们将介绍如何从 Numpy 3D 数组中创建 Pandas DataFrame。

创建 Numpy 3D 数组

首先,我们需要创建一个 Numpy 3D 数组。一个典型的 3D 数组由多个二维矩阵组成,其中每个矩阵可以是相同或不同的大小。例如,考虑以下示例:

import numpy as np

# Create 3D array
data = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(data)

结果将是:

array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])

请注意,此示例使用一个包含两个 2×2 矩阵的 3D 数组。现在我们有了一个 Numpy 3D 数组,下一步是将其转换为 Pandas DataFrame。

将 Numpy 3D 数组转换为 Pandas DataFrame

我们可以通过简单地重组 Numpy 3D 数组来创建 Pandas DataFrame。概括地说,我们将首先将所有矩阵转换为 Pandas DataFrame,然后将它们连接在一起形成一个大型 DataFrame。下面是转换过程的代码:

import numpy as np
import pandas as pd

# Create 3D array
data = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

# Convert each 2D matrix into a Pandas DataFrame
dfs = [pd.DataFrame(x) for x in data]

# Concatenate all Pandas DataFrames into one large DataFrame
df_final = pd.concat(dfs, keys=range(len(dfs)))
print(df_final)

结果将是:

     0  1
0 0  1  2
  1  3  4
1 0  5  6
  1  7  8

请注意,Pandas DataFrame 的每行都与 Numpy 3D 数组中的每个元素对应。我们还可以使用 Pandas 中的 MultiIndex 概念轻松地添加多个索引。

import numpy as np
import pandas as pd

# Create 3D array
data = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

# Convert each 2D matrix into a Pandas DataFrame
dfs = [pd.DataFrame(x) for x in data]

# Create MultiIndex with 3 levels
indices = pd.MultiIndex.from_product([range(s) for s in data.shape])

# Concatenate all Pandas DataFrames into one large DataFrame
df_final = pd.concat(dfs, keys=indices)
print(df_final)

现在,结果将是一个带有三级索引的 DataFrame。

       0  1
0 0 0  1  2
    1  3  4
  1 0  5  6
    1  7  8

我们已经将 Numpy 3D 数组成功转换为 Pandas DataFrame。让我们用一些更实际的数据来看看如何去做。

示例:从数据文件创建 Numpy 3D 数组并转换为 Pandas DataFrame

假设我们有一些气象记录数据,记录了每小时降雨量、气温和风速。我们想将这些数据转换为 Pandas DataFrame 以进行分析。

首先,我们将从文件中读取数据并将其存储在一个 Numpy 3D 数组中。在这个例子中,我们将使用 numpy.loadtxt() 函数从文本文件中读取数据。

import numpy as np

# Load data from file
filename = 'weather_data.txt'
with open(filename, 'r') as f:
    data = np.loadtxt(f)

# Reshape data into 3D array
data = data.reshape((4, 24, 3))
print(data)

首先,我们使用 open() 和 numpy.loadtxt() 从文件中读取数据。在这个例子中,文件包含四个天的数据,每天有24个小时和三个变量降雨量、气温和风速。数据被加载到一个一维数组中,我们将其转换为 4x24x3 的大小,并在最后一行打印数据以确保它正确加载。

下一步是将 Numpy 3D 数组转换为 Pandas DataFrame。我们需要创建一个 DataFrame 对象,其中每行对应于 Numpy 数组中一个小时的记录。

import numpy as np
import pandas as pd

# Load data from file
filename = 'weather_data.txt'
with open(filename, 'r') as f:
    data = np.loadtxt(f)

# Reshape data into 3D array
data = data.reshape((4, 24, 3))

# Convert 3D array into Pandas DataFrame
dfs = [pd.DataFrame(data[i], columns=['Rainfall', 'Temp', 'Wind']) for i in range(data.shape[0])]
indices = pd.MultiIndex.from_product([range(s) for s in data.shape])
df = pd.concat(dfs, keys=indices)
print(df)

在这里,我们首先创建了 Pandas 对象,并将其保存在名为 dfs 的列表中。每个数据框包含一个小时的记录,具有三个列名:Rainfall、Temp 和 Wind。

我们还创建了一个 MultiIndex 对象 indices,以将日期、小时和变量添加到索引中,以便于后续的分析。

最后,我们使用 concat() 函数将 dfs 中的所有数据框连接起来,并将索引设置为 MultiIndex 对象 indices。

输出如下所示:

           Rainfall  Temp  Wind
0 0 0          0.00  14.5   2.0
    1          0.25  15.0   1.5
    2          0.00  13.5   1.0
    3          0.00  12.0   1.5
...             ...   ...   ...
3 23 20         0.00  23.0   3.0
    21         0.00  22.5   3.0
    22         0.00  22.0   2.5
    23         0.00  21.5   2.5

[288 rows x 3 columns]

现在,我们已经成功地将 Numpy 3D 数组转换为 Pandas DataFrame,可以用来进行更进一步的数据分析了。

总结

在本文中,我们介绍了如何使用 Numpy 和 Pandas 将 Numpy 3D 数组有效地转换为 Pandas DataFrame。通过简单的重组,我们可以将 Numpy 数组中的每个矩阵转换为一个 Pandas 数据框,并将它们连接在一起形成一个更大的数据框。

我们还展示了如何使用 MultiIndex 对象在 Pandas 中创建分层索引,以便于后续的数据分析。

在您的下一个数据科学项目中,如果您需要从 Numpy 3D 数组中创建 Pandas DataFrame,请尝试使用本文中介绍的方法来提高您的效率。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程