python本机选择_作为_多个

python本机选择_作为_多个,python,pandas,pytables,Python,Pandas,Pytables,假设我有一个数据帧是块稀疏的。我的意思是,有几组行具有不相交的非空列集。将其存储在一个巨大的表中会在值中使用更多的内存(nan填充),而将表拆分为行将创建一个大索引(至少在保存到磁盘时是这样的……我不是100%清楚是否有一些高效的多索引正在进行) 通常,我将块作为单独的数据帧存储在dict或列表中(删除nan列),并创建一个与数据帧具有几乎相同api的类,“手动”将查询传递到块并连接结果。这很有效,但只需要少量的特殊代码来存储和处理这些对象 最近,我注意到pytables提供了与此类似的功能,但

假设我有一个数据帧是块稀疏的。我的意思是,有几组行具有不相交的非空列集。将其存储在一个巨大的表中会在值中使用更多的内存(nan填充),而将表拆分为行将创建一个大索引(至少在保存到磁盘时是这样的……我不是100%清楚是否有一些高效的多索引正在进行)

通常,我将块作为单独的数据帧存储在dict或列表中(删除nan列),并创建一个与数据帧具有几乎相同api的类,“手动”将查询传递到块并连接结果。这很有效,但只需要少量的特殊代码来存储和处理这些对象

最近,我注意到pytables提供了与此类似的功能,但仅适用于pytables查询api

有没有什么方法可以在熊猫身上处理这个问题?或者,我是否缺少一些更简单的方法来获得性能类似的解决方案

编辑:下面是一个小示例数据集

import pandas, string, itertools
from pylab import *

# create some data and put it in a list of blocks (d)
m = 10; n = 6;
s = list(string.ascii_uppercase)
A = array([s[x] * (1 + mod(x, 3)) for x in randint(0, 26, m*n)]).reshape(m, n)
df = pandas.DataFrame(A)
d = list()
d += [df.ix[0:(m/2)].T.ix[0:(n/2)].T]
d += [df.ix[(m/2):].T.ix[(n/2):].T]

# 1. use lots of memory, fill with na
d0 = pandas.concat(d) # this is just the original df

# 2. maybe ok, not sure how this is handled across different pandas versions
d1 = pandas.concat([x.unstack() for x in d])

# want this to work however the blocks are stored
print(d0.ix[[0, 8]][[2,5]])

# this raises exception
sdf = pandas.SparseDataFrame(df)

您可以这样使用
HDFStore

  • 使用一个公共索引(即索引本身)存储不同的表

  • 仅存储非所有nan行。因此,如果您对列进行智能分组(例如。 把那些可能有很多稀疏性的放在一起)。我认为您可以实现“稀疏”式布局

  • 如果需要,可以压缩表

  • 然后,您可以查询各个表,并获取坐标,然后从其他表中提取(这就是select_as_multiple所做的)

您能否提供一个小示例,以及数据集的大致大小,例如行数、列数、不相交组等


您的查询是什么样子的?这就是我处理问题的一般方法。计算您将如何进行查询;这将定义如何存储数据布局

你能发布一些示例数据来说明你正在处理的结构类型吗?另外,如果你看过《熊猫.斯巴达框架》,你能解释一下为什么这对你的案子不起作用吗?@马吕斯:谢谢,我真的不知道斯巴达框架。对它进行了简单的查看和尝试,它似乎只处理浮动(至少在默认情况下)。我考虑的用例涉及混合类型,如果我做一些工作,我可能能够在一列一列的级别强制执行一些更严格的类型。在0.13中,稀疏将支持多数据类型,因此这可能适用于您。是的,HDFStore就是我所说的选择多数据类型。我想我可以在大多数块没有完整索引集的情况下设置它。但我想我真正想要的是熊猫api。i、 我希望能够键入df.ix[something],并在提示时得到快速响应。我为这个用例考虑的数据适合内存,比如说大约有50个块,大部分在数千行中。取消堆叠到(Index,ColumnName)->value的多索引也可以,但感觉不太好,因为返回结构通常需要旋转回Index vs column view。好的……如果这可以在内存中完成,到底是什么问题?问题是熊猫api。。。我想要50个数据帧作为一个。无法在内存中合并帧。使用多索引系列(ID、属性)->值也不起作用(在第二个级别选择是一件痛苦的事情)。欢迎您参与此讨论:,但如果没有示例,仍然不清楚您在做什么。