【发布时间】:2012-08-16 15:12:30
【问题描述】:
既然 pandas 提供了数据框结构,那么 numpy 中是否需要结构化/记录数组?我需要对需要这种结构化数组类型框架的现有代码进行一些修改,但我正在考虑从现在开始使用 pandas 代替它。我会在任何时候发现我需要 pandas 不提供的结构化/记录数组的一些功能吗?
【问题讨论】:
既然 pandas 提供了数据框结构,那么 numpy 中是否需要结构化/记录数组?我需要对需要这种结构化数组类型框架的现有代码进行一些修改,但我正在考虑从现在开始使用 pandas 代替它。我会在任何时候发现我需要 pandas 不提供的结构化/记录数组的一些功能吗?
【问题讨论】:
pandas 的 DataFrame 是一个高级工具,而结构化数组是一个非常低级的工具,使您能够将二进制数据块解释为类似表的结构。在 pandas 中很难做到的一件事是嵌套数据类型与结构化数组具有相同的语义,尽管这可以通过分层索引来模仿(结构化数组无法完成大多数可以通过分层索引完成的事情)。
结构化数组还可以处理通过内存映射 (np.memmap) 加载的海量表格数据集。不过,这个限制最终会在 pandas 中得到解决。
【讨论】:
我目前正在从各种 Numpy 数组过渡到 Pandas DataFrames。自从 Pandas、AFAIK 以来,如果主要建立在 Numpy 之上,这已经相对轻松。我的意思是.mean()、.sum() 等都可以按照您的意愿工作。最重要的是,添加分层索引并使用.ix[](索引)属性和.xs()(横截面)方法提取任意数据片段的能力大大提高了我的代码的可读性和性能(主要是通过减少到我的数据库的往返次数)。
我尚未完全调查的一件事是 Pandas 与 Scipy 和 Matplotlib 的更高级功能的兼容性。但是,如果出现任何问题,很容易拉出一个行为足够像数组的列以供这些库工作,甚至可以即时转换为数组。例如,DataFrame 的绘图方法依赖于 matplotlib 并为您处理任何转换。
另外,如果您像我一样,并且您的 Scipy 主要用途是统计模块,那么 pystatsmodels 正在迅速成熟并严重依赖 pandas。
这是我的两分钱
【讨论】:
我从来没有花时间深入研究pandas,但我在 numpy 中经常使用结构化数组。以下是一些注意事项:
如果您不介意失去按属性访问字段的可能性,结构化数组与recarrays 一样方便,而且开销更少。但是,你有没有试过在recarray 中使用min 或max 作为字段名?
NumPy 的开发时间比 pandas 长得多,拥有更多的团队,并且它变得无处不在,以至于许多第三方软件包都依赖它。您可以期望结构化数组比 pandas 数据帧更便携。
pandas 数据帧是否易于挑选?例如可以用PyTables 来回发送吗?
除非您 100% 不会与非pandas 用户共享您的代码,否则您可能希望保留一些结构化数组。
【讨论】: