如何将 Pandas DataFrame 转换为 NumPy 数组

将 pandas DataFrame 转换为 NumPy 数组 — 简介 使用 pandas DataFrames 时,如果我们将它们转换为 NumPy 数组,有时可能会有所帮助。后者似乎更节省内存,尤其是在对数据执行一些复杂的数学运算时。当您使用相对较少的数量时尤其如此……

如何将 Pandas DataFrame 转换为 NumPy 数组

将 pandas DataFrame 转换为 NumPy 数组

Introduction

在使用 pandas DataFrames 时,如果我们将它们转换为 NumPy 数组,有时可能会有所帮助。后者似乎更节省内存,尤其是在对数据执行一些复杂的数学运算时。

当您使用相对少量的数据(比如说 50K 行或更少)时尤其如此。在涉及大量数据(例如 >500K 行)的情况下,Pandas 通常会优于 ndarrays。不过,这只是一个经验法则——在大多数情况下,最好根据您的具体要求和用例测试这两个选项,看看哪一个在性能和内存使用方面更好。

在今天的简短教程中,我们将展示如何有效地将 pandas DataFrame 转换为 NumPy 数组。

首先,让我们创建一个示例 pandas DataFrame,我们将使用它来演示几种可能用于将其转换为 numpy 数组的不同方法。

import pandas as pd
df = pd.DataFrame(
[
(1, 'A', 10.5, True),
(2, 'B', 10.0, False),
(3, 'A', 19.2, False),
(4, 'C', 21.1, True),
(5, 'A', 15.5, True),
(6, 'C', 14.9, False),
(7, 'C', 13.1, True),
(8, 'B', 12.5, False),
(9, 'C', 11.2, False),
(10, 'A', 31.4, False),
(11, 'D', 10.4, True),
],
columns=['colA', 'colB', 'colC', 'colD']
)
print(df)
colA colB colC colD
0 1 A 10.5 True
1 2 B 10.0 False
2 3 A 19.2 False
3 4 C 21.1 True
4 5 A 15.5 True
5 6 C 14.9 False
6 7 C 13.1 True
7 8 B 12.5 False
8 9 C 11.2 False
9 10 A 31.4 False
10 11 D 10.4 True

使用 pandas.DataFrame.to_numpy()

将 pandas DataFrame 转换为 NumPy 数组时,我们的第一个选项是 pandas.DataFrame.to_numpy() 方法。[0]

ndarray = df.to_numpy()print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)

返回对象的类型将是 numpy.ndarray:

>>> type(ndarray)
<class 'numpy.ndarray'>

使用 pandas.DatFrame.to_records()

这里的另一个选项是将 pandas DataFrame 转换为 NumPy 记录数组的 pandas.DataFrame.to_records() 方法:[0]

recarray = df.to_records()print(recarray)rec.array([( 0,  1, 'A', 10.5,  True), 
( 1, 2, 'B', 10. , False),
( 2, 3, 'A', 19.2, False),
( 3, 4, 'C', 21.1, True),
( 4, 5, 'A', 15.5, True),
( 5, 6, 'C', 14.9, False),
( 6, 7, 'C', 13.1, True),
( 7, 8, 'B', 12.5, False),
( 8, 9, 'C', 11.2, False),
( 9, 10, 'A', 31.4, False),
(10, 11, 'D', 10.4, True)],
dtype=[('index', '<i8'), ('colA', '<i8'), ('colB', 'O'), ('colC', '<f8'), ('colD', '?')])

如前所述,与 to_numpy() 相比,to_records() 方法将返回 nympy.recarray 类型的对象:

>>> type(recarray)
<class 'numpy.recarray'>

Using numpy.asarray()

我们在这里的第三个选项是 numpy.asarray() 方法,它将输入的 pandas DataFrame 转换为 NumPy 数组:[0]

import numpy as npndarray = np.asarray(df)print(ndarray)array([[1, 'A', 10.5, True],
[2, 'B', 10.0, False],
[3, 'A', 19.2, False],
[4, 'C', 21.1, True],
[5, 'A', 15.5, True],
[6, 'C', 14.9, False],
[7, 'C', 13.1, True],
[8, 'B', 12.5, False],
[9, 'C', 11.2, False],
[10, 'A', 31.4, False],
[11, 'D', 10.4, True]], dtype=object)

返回的对象将再次成为 numpy.ndarray 的一个实例:

>>> type(ndarray)
<class 'numpy.ndarray'>

避免使用 df.values

在较旧的 pandas 版本中,将 pandas DataFrame 转换为 NumPy 数组的另一种方法是通过 pandas.DataFrame.values 属性。但是请注意,即使官方文档也鼓励您不再使用它:[0]

我们建议改用 DataFrame.to_numpy()。[0]

这是因为此属性的行为不一致。要了解更多详细信息,您可以阅读 0.24.0 版本的发行说明。[0]

从历史上看,这将通过 series.values 完成,但对于 .values,返回的值是实际数组、它的一些转换还是 pandas 自定义数组之一(如分类)尚不清楚。

Final Thoughts

在今天的文章中,我们讨论了将 pandas DataFrames 转换为 NumPy 数组以及在什么情况下这样做是有益的。

此外,我们展示了如何使用 pandas.DataFrame 对象的 to_numpy() 和 to_records() 方法以及 numpy.asarray() 方法将 DataFrame 转换为 ndarray。

成为会员并阅读 Medium 上的每个故事。您的会员费直接支持我和您阅读的其他作家。您还可以完全访问 Medium 上的每个故事。[0]

您可能还喜欢的相关文章

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(1)
乘风的头像乘风管理团队
上一篇 2022年5月13日
下一篇 2022年5月13日

相关推荐