Pandas DataFrame、Series 和 Numpy ndarray 之间的相互转换

2025年1月9日 | 阅读 6 分钟

在 pandas 中,一种称为 Series 的列表类型可以包含数字、字符串、双精度数和其他类型的数据。相反,Pandas Series 将一个项目返回为一个列表,其中 n 是 Series 数据长度,索引从 0 到 n。我们将讨论 pandas 数据框和 Series,以及如何将它们转换为 NumPy 数组。数据框可以由一个以上的 Series 构成,或者我们可以说数据框是用于分析数据的 Series 的集合。Series 可以包含带有列表的单个列表。

为什么选择 NumPy 格式?

Python 列表比 NumPy 数组慢,而且也更小。数组的使用节省内存且简单。NumPy 提供了一种选择数据类型的方法,并使用更少的内存来存储数据。这使得代码的优化程度更高。

NumPy 使用内存少。当有 500K 或更多列时,Pandas 性能更好。当有 50K 或更少列时,NumPy 性能更好。与 NumPy 数组相比,Pandas Series 的索引速度要慢得多。

将 Pandas DataFrame 转换为 NumPy 数组

当您的 DataFrame 包含多个数据类型的列时,生成的 NumPy 数组将具有单一数据类型的元素。NumPy 数组的数据类型取决于基础 DataFrame 的数据类型。

本文将使用的数据集链接 - Dataset-Salary.csv

使用 to_records()

使用 to_records() 方法从 DataFrame 创建一个记录数组。如果需要,列表将作为记录数组的第一个字段。如果设置了“file”字段或使用了记录标记,则在最后一个记录数组中包含索引。如果指定了字符串或类型,则用于存储所有字段的数据类型。

语法

参数

  • column_dtypes: str, type, dict, default None 如果指定了字符串或类型,则用于存储所有字段的数据类型。如果为字典,则为列名和(零排序的)索引到特定数据类型的映射。
  • index_dtypes: str, type, dict, default None 如果指定了字符串或其他类型,则用于存储所有索引级别的。如果为字典,则为索引级别名称和(零排序的)索引到特定数据类型的映射。
  • Returns: numpy.recarray DataFrame 的每一列都由 DataFrame 的标签在 NumPy ndarray 字段中表示为一个字段。

示例

输出

[(0,  76416) (1,  83210) (2, 213456) (3, 235921) (4, 359109)]

我们导入 pandas 库并通过读取 CSV 文件来初始化 DataFrame。我们删除缺失值行,然后将列数据转换为 DataFrame,然后打印值及其索引。

使用 to_numpy()

DataFrame 中不同类型的普通 NumPy dtype 将自然用作返回数组的 dtype。例如,如果 dtype 是 float16 和 float32,则生成的 dtype 将是 float32。可能需要强制转换值和复制数据,这两者都可能代价高昂。

语法

Dataframe.to_numpy(dtype = None, copy = False)

参数

  • dtype:我们提供的数据类型,例如 str。
  • copy:[bool, default False] 检查以确保返回值不是另一个数组的视图。

Returns: 使用 to_numpy 函数时,该函数将返回 numpy.ndarray。

示例

输出

After converting dataframe to Numpy Array:
[[ 10  20  30] [ 70  80  90] [100 110 120]] 
    <class 'numpy.ndarray'>

示例 1

为了使用 dataFrame to_numpy() 函数,我们在此示例中将 DataFrame 转换为 Numpy 数组,使用的是 Salary Expectation Dataset 的 CSV 文件。然后使用 df.head() 函数输出 fnlwgt 列的前五个值。

输出

The first five values of the fnlwgt column:
[[ 76406] [ 83201] [213456] [232521] [325909]]

示例 2

在此示例中,我们通过在同一个函数中传递参数来指定 dtype。

输出

[[ 76406.] [ 83201.] [213456.] [232521.] [325909.]]

将 Pandas Series 转换为 NumPy 数组

使用 to_numpy()

Pandas 库中的 Series.to_numpy() 方法返回一个代表特定 Series 或 Record 中值的 NumPy ndarray。

我们可以使用此函数将 pandas Series 转换为 NumPy 数组。尽管这通常很简单,但这种方法有一个非常独特的概念。因为我们知道 Series 的输出是一个列表。相反,NumPy 数组只包含它们的元素。

语法

参数

  • dtype:我们提供的数据类型,例如 str。
  • copy:[bool, default False] 检查以确保返回值不是另一个数组的视图。

示例

使用 Series.to_numpy 函数将 Series 转换为 NumPy 数组。始终记住,在使用大量数据时,在开始使用数据之前对其进行清理将确保出色的准确性。在此代码中,我们使用 .head() 函数访问 Weight 列的前五个值。

输出

The first five values of the fnlwgt column:
[ 76406 83201 213456 232521 325909]

示例 1

在此示例中,我们通过在同一个函数中传递参数来指定 dtype。

输出

[[ 76406.] [ 83201.] [213456.] [232521.] [325909.]]

使用 as_matrix()

要将给定的 Series 或 DataFrame 对象表示为 Numpy 数组,请使用 Pandas Series.as_matrix() 方法。

语法

Series.as_matrix(columns=None)

参数

  • columns:如果选择 None,则返回所有列;否则,返回指定的列。

Returns: ndarray

示例

使用 series.as_matrix() 方法返回指定 Series 对象的 numpy 数组表示。

输出

Item 1 Pen
Item 2 Pencil
Item 3 Bag
Item 4 Box
dtype: object