我使用熊猫来创建一个大的索引HDF5表。我想重新命名表格中12列中的2列。我宁愿不重建/重新索引表。HDF5:有没有办法重命名现有HDF5表中的列名?
可这不复制所有数据(140GB)做些什么呢?我希望文件中只有几个元数据可以用正确的命令轻松地换出。
这次来到了我,因为我有几个“非天然”一栏包含空格的名字,并没有意识到这是一个问题,直到试图运行的SELECT语句。
我使用熊猫来创建一个大的索引HDF5表。我想重新命名表格中12列中的2列。我宁愿不重建/重新索引表。HDF5:有没有办法重命名现有HDF5表中的列名?
可这不复制所有数据(140GB)做些什么呢?我希望文件中只有几个元数据可以用正确的命令轻松地换出。
这次来到了我,因为我有几个“非天然”一栏包含空格的名字,并没有意识到这是一个问题,直到试图运行的SELECT语句。
恐怕目前还没有办法来重命名索引(属于data_columns
)列,因为这需要做在storer.table.colindexes
和storer.table.description
对象且二者的变化是特定类型的:
In [29]: store.get_storer('df').table
Out[29]:
/df/table (Table(10,)) ''
description := {
"index": Int64Col(shape=(), dflt=0, pos=0),
"a": Int32Col(shape=(), dflt=0, pos=1),
"b": Int32Col(shape=(), dflt=0, pos=2),
"c": Int32Col(shape=(), dflt=0, pos=3)}
byteorder := 'little'
chunkshape := (3276,)
autoindex := True
colindexes := {
"a": Index(6, medium, shuffle, zlib(1)).is_csi=False,
"index": Index(6, medium, shuffle, zlib(1)).is_csi=False,
"c": Index(6, medium, shuffle, zlib(1)).is_csi=False,
"b": Index(6, medium, shuffle, zlib(1)).is_csi=False}
In [30]: type(store.get_storer('df').table.colindexes)
Out[30]: tables.table._ColIndexes
In [31]: type(store.get_storer('df').table.description)
Out[31]: tables.description.Description
如果你尝试谷歌PyTables解决方案,你会发现这个问题,但有/没有答案,这将允许您重命名列。
所以,你可能要重新创建HDF5文件(S)
是的,我已经得出了同样的结论。我想知道这是否是或HDF5的PyTables的限制,虽然,但现在它似乎是唯一的解决办法是重新创建文件。 – eraoul
AFAIK有没有又一个“公平”的方式做到这一点,但你可以使用[此杰夫的黑客(http://stackoverflow.com/a/32082953/5741205) – MaxU
好主意 - 虽然似乎不适合我,但也许是因为我有索引表。我根据Jeff的黑客修改了所有可以找到的“attrs”元数据 - 包括为我出现的一些额外字段 - 但“select”仍然无法识别新的列名称。当我执行s.get_storer('all')。table.colindexes时,我看到列仍以旧名称命名。 – eraoul
是啊,有索引列,你有更多的“功课” ......检查'store.get_storer(“全部”)'你要重新命名,并尝试将其重命名列。还需要看看[PyTables的_f_rename()方法(http://www.pytables.org/usersguide/tutorials.html) – MaxU