【发布时间】: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 - 您不一定需要两个完整版本的程序。只需提取一个函数进行测试。构建测试背后的想法不仅仅是看看哪个更快,而且还要更多地学习每个库。您应该发现哪个库可以最简单地实现您正在尝试做的事情。起初这可能很乏味,但您将获得知识,因此下次遇到类似问题时,您会立即知道该采取什么选择。与实施时间相结合,拥有更快的运行时间是一个好处。但这是你的决定。
标签: python python-3.x numpy pandas