我有一个存储在文件中的Panel,我想向该面板添加更多数据 附加在内存中工作正常,但在尝试将数据附加到文件时,我收到此错误:
import pandas as pd
import numpy as np
df = pd.DataFrame(data = np.random.randn(5,6),columns=('a','b','c','d','e','f'))
pw = pd.Panel(major_axis = df.columns,minor_axis=df.index)
pw2 = pd.Panel(major_axis = df.columns,minor_axis=df.index)
pw['A'] = df
pw['B'] = df*2
pw['C'] = df*3
pw2['D'] = df*4
pw.to_hdf('proc.h5','proc' , mode='w',format='table',append=True)
pw2.to_hdf('proc.h5','proc' , mode='a',format='table',append=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 884, in to_hdf
return pytables.to_hdf(path_or_buf, key, self, **kwargs)
File "C:\Python27\lib\site-packages\pandas\io\pytables.py", line 279, in to_hdf
f(store)
File "C:\Python27\lib\site-packages\pandas\io\pytables.py", line 272, in <lambda>
f = lambda store: store.append(key, value, **kwargs)
File "C:\Python27\lib\site-packages\pandas\io\pytables.py", line 914, in append
**kwargs)
File "C:\Python27\lib\site-packages\pandas\io\pytables.py", line 1273, in _write_to_group
s.write(obj=value, append=append, complib=complib, **kwargs)
File "C:\Python27\lib\site-packages\pandas\io\pytables.py", line 3578, in write
**kwargs)
File "C:\Python27\lib\site-packages\pandas\io\pytables.py", line 3229, in create_axes
item in items))
ValueError: cannot match existing table structure for [A,B,C] on appending data
答案 0 :(得分:1)
axes
参数的文档为here。
存储&gt; 2昏暗的对象(Panel是3 dim)将对象展平为表结构,其中(在这种情况下)major_axis
和minor_axis
是索引。 items
轴是表格中的“列”。
因此,任何索引都允许附加,因此您可以追加一个更改了主轴和/或短轴的新面板。但是,项目轴在第一次附加表时是固定的。
为了提高效率,PyTables / HDF5需要这个固定的尺寸。
如果您愿意,可以指定要附加的不同轴,例如。 axes=['items','major_axis']
或简单地转置面板,以便以您需要的形式获取它。这是必须在第一个附加项上指定的参数。
您可以查看使用ptdump -av <file.h5>
创建的结构。