问题 numpy.ndarray vs pandas.DataFrame


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

我在一张大桌子上存储了数十万条记录。每个字段都是不同的类型,包括短字符串。我会对需要快速实时完成的数据进行多元回归分析和操作。我还需要使用一些相对受欢迎且得到很好支持的东西。

我知道以下参赛者:

列表 array.array

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

numpy.ndarray

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

pandas.DataFrame

这个是在考虑统计用途的情况下构建的,但它是否足够有效?

我读过,那个 pandas.DataFrame 是 不再基于 numpy.ndarray (虽然它共享相同的界面)。任何人都可以对此有所了解吗?或者可能有更好的数据结构?


9714
2017-08-08 10:15


起源

“我看了,那个 pandas.DataFrame 不再是基于 numpy.ndarray“不是真的 - 你所指的API改变意味着 pandas.Series 子类 NDFrame 而不是直接子类化 numpy.ndarray,但使用的内部存储 NDFrame 仍然包括 numpy.ndarrays。 - ali_m
进行一些测试。通过一些测试数据和最有可能完成的操作,可以在numpy.ndarray和pandas中构建一种方法。计算结果以确定哪种方法更快。在构建测试时,您会注意到哪些测试具有您需要的功能,以及易于实现。 - Ryan G
@RyanG运行测试意味着我需要制作两个版本的应用程序,并编写更多测试,而不是我认为我的应用程序真正需要的。我之所以选择Python,是因为我期望在最短的几个工作日内完成这项任务。我问这个问题是为了得到你们的主观意见,他们在两个框架中都有一些经验(或者更多)。 - Adam Ryczkowski
@AdamRyczkowski - 您不一定需要两个完整版本的程序。只需提取一个功能进行测试。构建测试背后的想法不仅仅是看哪个更快,而且还要更多地学习每个库。您应该发现哪个库可以让您最简单地实现您要执行的操作。这可能一开始很乏味,但你会获得知识,所以下次遇到类似的问题时,你会立即知道要采取什么选择。与实施时间相结合,具有更快的运行时间是一个额外的好处。但这是你对此的呼吁。 - Ryan G
相关问题: stackoverflow.com/questions/12052067/... - C8H10N4O2


答案:


pandas.DataFrame 太棒了,与很多numpy交互得非常好。大部分 DataFrame 是用Cython编写的,并且非常优化。我怀疑Pandas API的易用性和丰富性将大大超过你可以通过在numpy周围滚动自己的界面而获得的任何潜在好处。


16
2017-08-08 20:45



我知道这违反了SO的规则,但正是这种意见,我一直在寻找。谢谢! - Adam Ryczkowski
很高兴有帮助! - daniel