numpy.ndarray 与 pandas.DataFrame

Posted

技术标签:

【中文标题】numpy.ndarray 与 pandas.DataFrame【英文标题】:numpy.ndarray vs pandas.DataFrame 【发布时间】:2014-10-01 19:03:57 【问题描述】:

我需要就选择在我的程序中保存统计数据框的数据结构的基础做出战略决策。

我将数十万条记录存储在一张大表中。每个字段都属于不同的类型,包括短字符串。我会对需要快速实时完成的数据进行多重回归分析和操作。我还需要使用一些比较流行且得到很好支持的东西。

我知道以下参赛者:

array.array列表

这是最基本的事情。不幸的是,它不支持字符串。而且我无论如何都需要使用 numpy 作为其统计部分,所以这个是不可能的。

numpy.ndarray

ndarray 能够在每列中保存不同类型的数组(例如np.dtype([('name', np.str_, 16), ('grades', np.float64, (2,))]))。这似乎是一个自然的赢家,但是......

pandas.DataFrame

这是在构建时考虑到了统计用途,但它是否足够高效?

我读到,pandas.DataFrame 是no longer based on the numpy.ndarray(尽管它共享相同的接口)。任何人都可以对此有所了解吗?或者也许有更好的数据结构?

【问题讨论】:

“我读到,pandas.DataFrame 不再基于numpy.ndarray”。并非如此 - 您所指的 API 更改只是意味着 pandas.Series 子类化 NDFrame 而不是直接子类化 numpy.ndarray,但 NDFrame 使用的内部存储仍然由 numpy.ndarrays 组成。 运行一些测试。使用一些测试数据和您最有可能做最多的操作,在 numpy.ndarray 和 pandas 中建立一种方法。对结果进行计时以确定哪种方法更快。在构建测试时,您会注意到哪个测试具有您需要的所需功能,并且易于实施。 @RyanG 运行测试意味着我需要制作我的应用程序的两个版本,并编写比我认为我的应用程序真正需要的更多的测试。我选择了 Python,因为我希望最多在几个工作日内完成这项任务。我问这个问题是为了从你们中获得主观意见,他们在这两个框架(或者更多)方面都有一些经验。 @AdamRyczkowski - 您不一定需要两个完整版本的程序。只需提取一个函数进行测试。构建测试背后的想法不仅仅是看看哪个更快,而且还要更多地学习每个库。您应该发现哪个库可以最简单地实现您正在尝试做的事情。起初这可能很乏味,但您将获得知识,因此下次遇到类似问题时,您会立即知道该采取什么选择。与实施时间相结合,拥有更快的运行时间是一个好处。但这是你的决定。 相关问题:***.com/questions/12052067/… 【参考方案1】:

pandas.DataFrame 非常棒,并且与许多 numpy 的交互非常好。 DataFrame 的大部分内容是用 Cython 编写的,并且经过了相当程度的优化。我怀疑 Pandas API 的易用性和丰富性将大大超过您通过围绕 numpy 滚动您自己的接口所获得的任何潜在好处。

【讨论】:

我知道这违反了 SO 的规则,但这正是我想要的意见。谢谢!

以上是关于numpy.ndarray 与 pandas.DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

np.ndarray与torch.Tensor之间的转化 (图像的区别)

TypeError: 不支持的操作数类型 -: 'numpy.ndarray' 和 'numpy.ndarray'

numpy.ndarray的赋值操作

Numpy - ndarray 结构

在 Scikit Learn 中运行 SelectKBest 后,“numpy.ndarray”对象没有属性“get_support”错误消息

NumPy Ndarray对象