【问题标题】:Multidimensional arrays in Pandas columnsPandas 列中的多维数组
【发布时间】:2013-07-15 18:44:58
【问题描述】:

我的数据将由许多属性组成,这些属性可以用任意长度的数组来描述(例如,一个对象可以包含一定数量的集群,我想将每个组成集群的大小存储为一列,但原则上,每个对象的簇数范围可以从 0 到 \infty)。有没有办法支持任何长度的数组作为 Pandas 数据框中的列数据?我意识到我可以使用面板,但 AFAIK 需要知道面板的深度(原则上我在加载数据之前无法知道),此外,面板可能非常稀疏,因为在示例中,许多对象可能只有很少的簇。

如果我只使用 dtype=object 的 numpy 数组,是否会对存储在 H5Store 或 Pandas 选择或其他任何东西的性能产生任何影响?

【问题讨论】:

  • 您不能添加一个名为“cluster_id”的列并将其全部存储在一个简单的数据框中吗?
  • 啊,你的意思是一列可以包含数据框?这对性能有什么影响吗?我在某处读到使用 numpy.array 作为列数据将不允许某些 Pandas 优化,但如果数据帧不是这种情况作为列数据,那就太好了!
  • 如果每个集群都有一个数据框,列 ['A', 'B', 'C'] 将它们组合成一个新的数据框,列 ['ID', 'A', 'B ', 'C'] 其中 ID 是每个集群的唯一标识符。因此,您将拥有“一个”巨大的数据框(没有列包含数据框),其中每个集群将有不止一行。如果需要,我可以发布更详细的解释作为答案
  • 是的,举个例子就好了。这是我尝试将 Pandas 用于以下场景的示意图: * 对象 1:[集群 1a,集群 1b,集群 1c] * 对象 2:[集群 2a,集群 2b,...集群 2z] * 对象 3: [集群 3a] * ... * 对象 n:[集群 na, ... 集群 nk]

标签: python numpy pandas multidimensional-array pytables


【解决方案1】:

每个对象有不同的行数,而不是每个对象的不同列数

pd.DataFrame({'ClusterID' : '1a,1b,2a,2b,2c,2d,3a'.split(','), 'ObjectID' : [1,1,2,2,2,2,3]})
  ObjectID  ClusterID
0        1         1a
1        1         1b
2        2         2a
3        2         2b
4        2         2c
5        2         2d
6        3         3a

如果每个集群有多个属性,您可以将它们存储在单独的表中,如下所示。这将允许多个对象共享集群而无需复制数据

pd.DataFrame({'ClusterID' : '1a,1b,2a,2b,2c,2d,3a'.split(','), 'ClusterAttr-1' : 'Attr-1', 'ClusterAttr-2' : 'Attr-2'})
  ClusterID ClusterAttr-1 ClusterAttr-2
0        1a        Attr-1        Attr-2
1        1b        Attr-1        Attr-2
2        2a        Attr-1        Attr-2
3        2b        Attr-1        Attr-2
4        2c        Attr-1        Attr-2
5        2d        Attr-1        Attr-2
6        3a        Attr-1        Attr-2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2019-05-05
    • 2019-03-12
    • 1970-01-01
    • 2019-07-08
    • 2021-12-02
    • 2021-09-25
    相关资源
    最近更新 更多