现在Pandas提供了数据框架结构,是否还需要NumPy中的结构化/记录数组?我需要对现有代码进行一些修改,该代码需要这种结构化数组类型框架,但我考虑从现在开始使用Pandas替代它。是否会发现我需要结构化/记录数组的某些功能而Pandas没有提供?
pandas的DataFrame是一个高级工具,而结构化数组是一个非常低级的工具,可以将二进制数据块解释为类似于表格的结构。在pandas中难以执行的一件事情是嵌套数据类型,其与结构化数组具有相同的语义,尽管可以通过分层索引进行模拟(结构化数组无法做到大多数可以使用分层索引完成的操作)。
结构化数组也适用于通过内存映射加载的大型表格数据集的处理(np.memmap)。尽管如此,这是pandas最终会解决的限制。
我目前正在从各种Numpy数组过渡到Pandas数据框。这一过程相对顺利,因为据我所知,Pandas主要是在Numpy的基础上构建而成的。我的意思是.mean()
、.sum()
等方法都能如愿工作。另外,添加分层索引、使用.ix[]
(索引)属性和.xs()
(交叉截面)方法提取数据的任意部分,大大提高了代码的可读性和性能(主要是减少了与数据库的往返次数)。
我还没有完全研究Pandas与Scipy和Matplotlib的更高级功能之间的兼容性。然而,如果出现任何问题,可以轻松地提取一个行为类似于数组的单个列,使得这些库可以正常工作,甚至可以即时转换为数组形式。例如,数据框的绘图方法依赖于matplotlib并自动进行必要的转换。
此外,如果你和我一样,主要使用Scipy中的统计模块,那么pystatsmodels正在快速成熟,并且大量依赖于Pandas。
以上是我的看法。
我从未花时间深入研究过 pandas
,但我经常在 numpy 中使用结构化数组。以下是一些考虑:
如果您不介意失去按属性访问字段的可能性,那么结构化数组与 recarrays
一样方便,但开销更小。但是,您是否曾尝试在 recarray
中使用 min
或 max
作为字段名称?
NumPy 的开发时间比 pandas
长得多,拥有更大的团队,并且已经足够普及,以至于许多第三方软件包都依赖于它。您可以预期结构化数组比 pandas
数据框更具可移植性。
pandas
数据框易于挑选吗?例如,它们能否与 PyTables
来回发送?
除非您百分之百确定永远不需要与非 pandas
用户共享代码,否则您可能希望保留一些结构化数组。