Python HDFStore表不接受多索引列

Python HDFStore表不接受多索引列,python,pandas,pytables,Python,Pandas,Pytables,这很好: cols = ['X', 'Y'] ind = [('A', 1), ('B', 2)] ind = pd.MultiIndex.from_tuples(index, names=['foo', 'number']) df = pd.DataFrame(rand(2,2), columns = cols, index=ind) store.put('df', df, table=True) print store['df'] X Y f

这很好:

cols = ['X', 'Y']
ind = [('A', 1), ('B', 2)]
ind = pd.MultiIndex.from_tuples(index, names=['foo', 'number'])

df = pd.DataFrame(rand(2,2), columns = cols, index=ind)
store.put('df', df, table=True)
print store['df']

               X         Y
foo number                    
A   1       0.015005  0.213427
B   2       0.090311  0.595418
这打破了:

cols = [('X', 1), ('Y', 2)]
cols = pd.MultiIndex.from_tuples(index, names=['bar', 'number'])
ind = [('A', 1), ('B', 2)]
ind = pd.MultiIndex.from_tuples(index, names=['foo', 'number'])

df = pd.DataFrame(rand(2,2), columns = cols, index=ind)
store.put('df', df, table=True)
print store['df']

KeyError: u'no item named foo'

我怀疑这是使用PyTables的一个已知限制,但我在Pandas文档中找不到任何关于多索引实际上仅限于索引而非列的引用。

这不受支持,例如列多索引和索引多索引。任何一个单独起作用。然而,通常情况下,列多索引不是很有用,因为如果没有一些非常奇怪的语法,就无法从中选择列。列存储为元组,因此必须明确选择它们。所以无论如何我都不会推荐它


我将打开一个问题来支持这两者,因为它当前提出了,在任何情况下,请参见此处:

这是不受支持的,例如,列多索引和索引多索引。任何一个单独起作用。然而,通常情况下,列多索引不是很有用,因为如果没有一些非常奇怪的语法,就无法从中选择列。列存储为元组,因此必须明确选择它们。所以无论如何我都不会推荐它

我将打开一个问题来支持这两种方法,因为它当前提出了一个问题,在任何情况下,请参见此处:

直到问题得到解决,您可以在存储索引之前折叠索引,作为一种解决方法,请参见以下内容:

并重新创建它,假设没有其他点。存在于原始列名中的任何位置:

df = store['/df']
df.columns = pd.MultiIndex.from_tuples([c.split('.') for c in df.columns])
在解决此问题之前,您可以在存储索引之前折叠索引,作为一种解决方法,请参见以下内容:

并重新创建它,假设没有其他点。存在于原始列名中的任何位置:

df = store['/df']
df.columns = pd.MultiIndex.from_tuples([c.split('.') for c in df.columns])

实际上,选择多列并不是那么困难,例如:idx=pd.indexlice;df.loc[:,idx[:,'mean']]是我一直在做的事情。@ankostis这是从一个磁盘存储中来的,它将列名序列化为字符串,而不是内存中的框架。实际上,选择多列并不难,例如:idx=pd.indexlice;df.loc[:,idx[:,'mean']]是我一直在做的事情。@ankostis这是从磁盘存储中获取的,它将列名序列化为字符串,而不是内存中的帧