如果我使用Python Pandas,是否需要使用结构化数组?

23

现在Pandas提供了数据框架结构,是否还需要NumPy中的结构化/记录数组?我需要对现有代码进行一些修改,该代码需要这种结构化数组类型框架,但我考虑从现在开始使用Pandas替代它。是否会发现我需要结构化/记录数组的某些功能而Pandas没有提供?


相关问题:https://dev59.com/Ll8e5IYBdhLWcg3w7-Jz - C8H10N4O2
3个回答

16

pandas的DataFrame是一个高级工具,而结构化数组是一个非常低级的工具,可以将二进制数据块解释为类似于表格的结构。在pandas中难以执行的一件事情是嵌套数据类型,其与结构化数组具有相同的语义,尽管可以通过分层索引进行模拟(结构化数组无法做到大多数可以使用分层索引完成的操作)。

结构化数组也适用于通过内存映射加载的大型表格数据集的处理(np.memmap)。尽管如此,这是pandas最终会解决的限制。


7

我目前正在从各种Numpy数组过渡到Pandas数据框。这一过程相对顺利,因为据我所知,Pandas主要是在Numpy的基础上构建而成的。我的意思是.mean().sum()等方法都能如愿工作。另外,添加分层索引、使用.ix[](索引)属性和.xs()(交叉截面)方法提取数据的任意部分,大大提高了代码的可读性和性能(主要是减少了与数据库的往返次数)。

我还没有完全研究Pandas与Scipy和Matplotlib的更高级功能之间的兼容性。然而,如果出现任何问题,可以轻松地提取一个行为类似于数组的单个列,使得这些库可以正常工作,甚至可以即时转换为数组形式。例如,数据框的绘图方法依赖于matplotlib并自动进行必要的转换。

此外,如果你和我一样,主要使用Scipy中的统计模块,那么pystatsmodels正在快速成熟,并且大量依赖于Pandas。

以上是我的看法。


1

我从未花时间深入研究过 pandas,但我经常在 numpy 中使用结构化数组。以下是一些考虑:

  • 如果您不介意失去按属性访问字段的可能性,那么结构化数组与 recarrays 一样方便,但开销更小。但是,您是否曾尝试在 recarray 中使用 minmax 作为字段名称?

  • NumPy 的开发时间比 pandas 长得多,拥有更大的团队,并且已经足够普及,以至于许多第三方软件包都依赖于它。您可以预期结构化数组比 pandas 数据框更具可移植性。

  • pandas 数据框易于挑选吗?例如,它们能否与 PyTables 来回发送?

除非您百分之百确定永远不需要与非 pandas 用户共享代码,否则您可能希望保留一些结构化数组。


7
使用 numpy 和 scipy 已经有一段时间了,最近开始使用 Pandas,我敢说:这是未来的方向,值得一试。如果我之前知道,我可以节省多少工作量,写出更好的脚本... - heltonbiker
1
关于PyTables,最新版本引入了HDFStore,可以让Pandas直接和本地查询/存储HDF格式表格。另一个值得注意的是,相较于numpy或Python中当前可用的任何其他解决方案,Pandas从文件读取数据的速度要快得多。 - gaborous
2
未来对2012年的@heltonbiker说:你是正确的,pandas。 - derchambers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接