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

时间:2012-08-21 09:37:29

标签: numpy scipy pandas

既然pandas提供了数据帧结构,那么numpy中是否需要结构化/记录数组?我需要对现有代码进行一些修改,这需要这个结构化数组类型框架,但我正在考虑从现在开始使用pandas。在任何时候我都会发现我需要一些pandas不提供的结构化/记录数组功能吗?

3 个答案:

答案 0 :(得分:14)

pandas的DataFrame是一个高级工具,而结构化数组是一个非常低级的工具,使您能够将二进制blob数据解释为类似于表的结构。在pandas中很难做的一件事是嵌套数据类型与结构化数组具有相同的语义,尽管这可以通过层次索引来模仿(结构化数组不能完成大多数可以通过层次索引进行的操作)。

结构化数组也适用于处理通过内存映射(np.memmap)加载的大量表格数据集。这是一个限制,最终将在熊猫中解决。

答案 1 :(得分:7)

我目前正在从各种Numpy阵列过渡到Pandas DataFrames。这是相对无痛的,因为Pandas,AFAIK,如果主要建立在Numpy之上。我的意思是.mean().sum()等所有工作都如你所愿。最重要的是,添加分层索引并使用.ix[](索引)属性和.xs()(横截面)方法来提取数据的任意部分的能力大大提高了可读性和我的代码的性能(主要通过减少到我的数据库的往返次数)。

我尚未完全研究的一件事是Pandas与Scipy和Matplotlib的更高级功能的兼容性。但是,如果出现任何问题,就可以轻松地拉出一个行,就像数组一样,可以使这些库工作,甚至可以动态转换为数组。例如,DataFrame的绘图方法依赖于matplotlib并为您处理任何转换。

另外,如果你像我一样,你主要使用Scipy是统计模块,那么pystatsmodels很快就会成熟并且很大程度上依赖于熊猫。

这是我的两分钱值得

答案 2 :(得分:1)

我从来没有花时间去挖掘pandas,但我经常在numpy中使用结构化数组。以下是一些注意事项:

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

  • NumPy的开发时间比pandas长得多,拥有更多的工作人员,并且它变得无处不在,很多第三方软件包依赖它。您可以期望结构化数组比pandas数据帧更具可移植性。

  • pandas数据框是否可以轻松选取?例如,可以使用PyTables来回发送它们吗?

除非你是100%百分比,否则你永远不必与非pandas用户分享你的代码,你可能想要保留一些结构化数组。