Python - Pandas 相对于 Numpy/Scipy 的主要改进是什么

Python - What are the major improvement of Pandas over Numpy/Scipy

我一直在使用numpy/scipy进行数据分析。我最近开始学习Pandas。

我已经学习了一些教程,我试图了解 Pandas 相对于 Numpy/Scipy 的主要改进是什么。

在我看来,Pandas 的关键思想是将不同的 numpy 数组包装在一个数据框中,并围绕它使用一些实用函数。

关于 Pandas 有什么 革命性的 是我愚蠢地错过的吗?

Pandas 并不是特别 革命性的 并且确实使用 NumPy 和 SciPy 生态系统以及一些关键的 Cython 代码来实现它的目标。它可以被看作是一个更简单的 API 功能,添加了关键实用程序,如连接和更简单的分组功能,这些功能对于具有 Table 类数据或时间序列的人特别有用。但是,虽然不是革命性的,Pandas 确实有一些关键的好处。

有一段时间我还认为 Pandas 只是 NumPy 之上的实用程序,供那些喜欢 DataFrame 界面的人使用。但是,我现在看到 Pandas 提供了这些关键功能(这并不全面):

  1. 结构数组(不同类型的独立存储,而不是 NumPy 中结构化数组的连续存储)--- 在许多情况下,这将允许更快的处理。
  2. 常见操作(文件加载、绘图、选择和连接/对齐数据)的界面更简单,可以轻松地用很少的代码完成大量工作。
  3. 索引数组,这意味着操作总是对齐,而不必自己跟踪对齐。
  4. Split-Apply-Combine 是一种思考和实施数据处理的强大方式

但是,Pandas 也有缺点:

  1. Pandas 基本上是一个用户界面库,并不特别适合编写库代码。 "automatic" 功能可以让您重复使用它们,即使您不需要并减慢被一遍又一遍调用的代码的速度。
  2. Pandas 通常会占用更多内存,因为它在创建对象数组时很慷慨,可以解决字符串处理等棘手问题。
  3. 如果您的用例超出了 Pandas 的设计范围,它很快就会变得笨拙。但是,在其设计目的范围内,Pandas 功能强大且易于使用,可用于快速数据分析。

我觉得将 Pandas 描述为 "improving on" Numpy/SciPy 错过了很多要点。 Numpy/Scipy 非常专注于高效的数值计算和解决科学家和工程师经常解决的那种数值问题。如果您的问题从公式开始,然后涉及到数值解,那么您可能很擅长这两个。

Pandas 更符合从存储在文件或数据库中的数据开始并且包含字符串和数字的问题。考虑从数据库查询中读取数据的问题。在 Pandas 中,您可以直接 read_sql_query 并在一行中获得可用的数据版本。 Numpy/SciPy.

中没有等效功能

对于以字符串或离散数据而非连续数据为特征的数据,没有与 groupby 功能等效的功能,也没有类似数据库的表格连接匹配值。

对于时间序列,handling time series data 使用日期时间索引有巨大的好处,它允许您平滑地重新采样到不同的间隔、填充值并非常轻松地绘制您的序列。

由于我的许多问题都是从电子表格开始的,我也非常感谢对 .xls.xlsx 格式的 Excel 文件的相对透明的处理 [= =17=].

还有一个更大的生态系统,与基础 numpy/scipy 东西相比,像 seaborn 这样的软件包可以实现更流畅的统计分析和模型拟合。

一个要点是它引入了新的数据结构,如数据框、面板等,并且具有与其他结构和库的良好接口。所以一般来说,它更像是对 python 生态系统的扩展,而不是对其他库的改进。对我来说,它是 numpy、bcolz 等其他工具中的一个很棒的工具。我经常用它来重塑我的数据,在开始进行数据挖掘之前获得一个概览等等。