【问题标题】:If I use python pandas, is there any need for structured arrays?如果我使用 python pandas,是否需要结构化数组?
【发布时间】:2012-08-16 15:12:30
【问题描述】:

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

【问题讨论】:

标签: numpy scipy pandas


【解决方案1】:

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

结构化数组还可以处理通过内存映射 (np.memmap) 加载的海量表格数据集。不过,这个限制最终会在 pandas 中得到解决。

【讨论】:

    【解决方案2】:

    我目前正在从各种 Numpy 数组过渡到 Pandas DataFrames。自从 Pandas、AFAIK 以来,如果主要建立在 Numpy 之上,这已经相对轻松。我的意思是.mean().sum() 等都可以按照您的意愿工作。最重要的是,添加分层索引并使用.ix[](索引)属性和.xs()(横截面)方法提取任意数据片段的能力大大提高了我的代码的可读性和性能(主要是通过减少到我的数据库的往返次数)。

    我尚未完全调查的一件事是 Pandas 与 Scipy 和 Matplotlib 的更高级功能的兼容性。但是,如果出现任何问题,很容易拉出一个行为足够像数组的列以供这些库工作,甚至可以即时转换为数组。例如,DataFrame 的绘图方法依赖于 matplotlib 并为您处理任何转换。

    另外,如果您像我一样,并且您的 Scipy 主要用途是统计模块,那么 pystatsmodels 正在迅速成熟并严重依赖 pandas。

    这是我的两分钱

    【讨论】:

      【解决方案3】:

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

      • 如果您不介意失去按属性访问字段的可能性,结构化数组与recarrays 一样方便,而且开销更少。但是,你有没有试过在recarray 中使用minmax 作为字段名?

      • NumPy 的开发时间比 pandas 长得多,拥有更多的团队,并且它变得无处不在,以至于许多第三方软件包都依赖它。您可以期望结构化数组比 pandas 数据帧更便携。

      • pandas 数据帧是否易于挑选?例如可以用PyTables 来回发送吗?

      除非您 100% 不会与非pandas 用户共享您的代码,否则您可能希望保留一些结构化数组。

      【讨论】:

      • 在使用numpy和scipy一段时间后,最近开始使用Pandas,我敢说:去吧,这不是未来的路,要走的路.我可以节省多少工作,我可以完成多少更好的脚本......只有我以前知道......
      • 关于 PyTables,最新版本引入了 HDFStore,它允许 Pandas 直接本地查询/存储在 HDF 表中。另一件值得注意的事情是,Pandas 从文件中读取数据的速度比 numpy 或 Python 目前可用的任何其他解决方案要快得多。
      • 2012 年 @heltonbiker 的未来:你是对的熊猫
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2012-12-16
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多