2013-09-22 57 views
0

假设我有一个块稀疏的DataFrame。通过这个,我的意思是有一组行具有不相交的非空列集合。存储这个巨大的表格会在值中使用更多的内存(nan填充),并且将表格拆分为行将创建大型索引(至少在保存到磁盘时似乎是这样的......如果存在,我不是100%清除是应该进行的一些有效的MultiIndexing)。python pandas native select_as_multiple

通常,我将块存储为字典或列表中的单独DataFrame(删除nan列)并创建一个与DataFrame具有几乎相同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) 
+0

你可以发布一些示例数据来展示你正在处理的结构类型吗?另外,如果你看过'pandas.SparseDataFrame',你能解释为什么这对你的情况不起作用吗? – Marius

+0

@Marius:谢谢,我并没有真正意识到SparseDataFrame。有一个简短的审视和简短的尝试,它似乎只处理浮动(至少默认情况下)。我想到的用例涉及混合类型,如果我做了一些工作,我可能会逐列执行更严格的输入。在0.13中 – mathtick

+1

,稀疏将支持多种dtypes,这样可能适合你。 – Jeff

回答

1

你可以使用HDFStore这样

  • 商店不同的表有一个共同的指数(即本身)列

  • 只有非全部行将被存储。所以如果您将您的列进行智能分组(例如 将在同一地点往往会有很多稀疏的那些)。我认为你可以实现'稀疏'式的布局。

  • 如有必要,您可以压缩表格。

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

您可以举一个小例子和数据集的粗略大小,例如:行数,列数,不相交组等。

您的查询是什么样的?这通常是我如何处理这个问题。图表我们将如何查询;这将定义如何存储数据布局。

+0

是的,HDFStore就是我所说的select_as_multiple。我想我可以用大多数没有完整索引集的块来设置它。但我认为我真正想要的是熊猫api。即我希望能够输入df.ix [something]并在提示符处获得快速响应。 我正在考虑的这个用例的数据适合内存,大约有50个块,大部分在成千上万行中。对(Index,ColumnName) - > value的MultiIndex进行解压,但是某种程度上并不令人感觉好,因为返回结构通常需要返回到索引vs列视图。 – mathtick

+0

好的......如果这可以在记忆中完成,那究竟是什么问题? – Jeff

+0

问题是熊猫api ...我想要50个数据框表现为一个。合并帧*不能在内存中完成。使用MultiIndex系列(ID,属性) - >值不起作用(在第二级选择是件痛苦的事)。 – mathtick