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这是从磁盘存储中获取的,它将列名序列化为字符串,而不是内存中的帧