何时使用pandas系列,numpy ndarrays或简单的python词典?

时间:2017-07-24 16:32:52

标签: python pandas numpy

我是学习Python及其一些库(numpy,pandas)的新手。

我找到了很多关于 如何 numpy ndarrays,pandas系列和python词典工作的文档。

但是由于我对Python的经验不足,我很难确定 何时 才能使用它们。我还没有找到任何可以帮助我理解并决定何时使用每种类型数据结构的最佳实践。

作为一般事项,是否有任何最佳实践来决定应将这三个数据结构中的哪一个(如果有的话)加载到特定数据集中?

谢谢!

5 个答案:

答案 0 :(得分:20)

我经常应用的经验法则:使用仍然满足您需求的最简单的数据结构。如果我们将数据结构从最简单到最简单排序,它通常会这样结束:

  1. 字典/列表
  2. Numpy数组
  3. 熊猫系列/数据架
  4. 首先考虑字典/列表。如果这些允许您执行所需的所有数据操作,那么一切都很好。如果没有,开始考虑numpy数组。迁移到numpy数组的一些典型原因是:

    • 您的数据是二维(或更高)。虽然嵌套字典/列表可用于表示多维数据,但在大多数情况下,numpy数组将更有效。
    • 您必须执行一系列数值计算。正如 zhqiat 已经指出的那样,numpy会在这种情况下显着提升速度。此外,numpy数组捆绑了大量的mathematical functions

    然后还有一些典型的原因可以超越numpy数组,以及更复杂但功能更强大的pandas系列/数据帧:

    • 您必须相互合并多个数据集,或者对数据进行整形/重新排序。 This diagram概述了pandas允许您执行的所有“数据纠缠”操作。
    • 您必须从Excel或HDF5或SQL等特定文件格式导入数据或将数据导出。对此,Pandas方便import/export functions

答案 1 :(得分:4)

Pandas通常用于财务时间序列数据/经济数据(它有很多内置帮助程序来处理财务数据)。

Numpy是处理用于科学计算的大型数组多维数组的快速方法(scipy也有帮助)。它还可以轻松处理所谓的稀疏数组(其中包含非常少的数据的大型数组)。

numpy的一个主要优点是C绑定,它允许大规模计算中的大量加速,以及一些内置函数,如线性代数/信号处理功能。

这两个软件包都解决了使用python在现有内置数据类型中识别出的一些缺陷。作为一般的经验法则,对于不完整的真实世界数据(NaN,异常值等),您最终需要编写解决这些问题的所有类型的函数;使用上述包,您可以建立在他人的工作上。如果您的程序在内部为您的数据类型生成数据,您可以使用更简单的本机数据结构(而不​​仅仅是python词典)。

请参阅Pandas作者的post进行比较

答案 2 :(得分:4)

如果你想得到一个答案,告诉你只坚持一种类型的数据结构,这里有一个:使用pandas系列/数据帧结构

pandas系列对象可以看作增强的numpy 1D数组,pandas数据框可以看作增强的numpy 2D数组。主要区别在于pandas系列和pandas数据帧具有显式索引,而numpy数组具有隐式索引。所以,在你认为使用像

这样的任何python代码中
import pandas as pd
a = pd.Series([1,2,3])

你可以使用

a.values

numpy数组中的所有函数和方法都适用于pandas系列。类似地,对于数据帧和numpy 2D阵列也可以这样做。

您可能遇到的另一个问题可能是numpy数组和pandas系列之间的性能差异。以下是使用这两个工具显示性能差异的帖子:performance of pandas series vs numpy arrays

请注意,即使在一个明显的方式中,与numpy相比,pandas系列在性能上有一个微妙的差异,你可以通过调用pandas系列上的values方法来解决这个问题:

{{1}}

在pandas系列中应用values方法的结果将是一个numpy数组!

答案 3 :(得分:0)

Numpy在数组,矩阵,数学方面非常快。 Pandas系列有索引,有时它对排序或连接数据非常有用。 字典是一种缓慢的野兽,但有时它也非常方便。 因此,正如已经提到的那样,它取决于使用数据类型和工具的用例。

答案 4 :(得分:0)

我想说的是pandas可以让您索引和分割字符串,并直接从字典创建数据帧,而numpy主要是嵌套列表。除此之外,它们几乎完全相同(pandas建立在numpy之上)。因此pandas对于使用类似数据库的数据(例如csv,excel和sql文件)“感觉”更为自然,而numpy对于数据的数字处理(例如信号,图像)“感觉”更为自然等)。当然,您可以在两个库中执行许多相同的操作;您甚至可以从pandas数组创建numpy数据帧,反之亦然。

pandas中的切片是一个主要区别(需要注意),而切片numpy是排他性的(即0:10中的pandas是“ 0直到且包括10”,而在numpy中则为“ 0直到但不包括10”)。从直觉上讲,这是由于以下事实:由于pandas允许在字符串上切片,因此切片(例如,最多但不包括名称x列)没有太大意义(请大声喊叫向Corey Schafer寻求了解(见约30分钟):Python Pandas Tutorial (Part 2))。

除此之外,pandas使用与numpy相同的切片,索引和奇特的索引符号(减去字符串的能力),并针对不同的操作创建使用相同类型的“陷阱”视图与数据副本。 (出色的numpy教程是a Numpy lecture from SciPy 2019 by Alex Chabot-Leclerc)。

最后,我想说pandas是数据库分析师的最好朋友,而numpy是数据科学家的朋友。就个人而言,我使用pandas从现实世界中提取数据,对其进行排序并进行预处理。然后,我将在必要时将这些数据转换为numpy数组,以进行更严格的数字计算。 请注意:这纯粹是观点。没有正确的答案。

话虽如此,我强烈建议您首先了解和了解numpy(强烈建议Alex Chabot-Leclerc video)。之后,pandas会更有意义。