Python HDF5:是否有方法重命名现有HDF5表中的列名?

Python HDF5:是否有方法重命名现有HDF5表中的列名?,python,pandas,hdf5,pytables,hdfstore,Python,Pandas,Hdf5,Pytables,Hdfstore,我使用Pandas创建了一个大型的索引HDF5表。我想重命名表中12列中的2列。我不希望重建/重新索引表 是否可以在不复制所有数据(140GB)的情况下执行此操作?我希望文件中只有几段元数据可以通过正确的命令轻松地交换出去 对我来说,这是因为我有一些“非自然”的列名,其中包含空格,直到尝试运行select语句时才意识到这是一个问题。恐怕目前无法重命名索引(属于数据列))列,因为这需要在storer.table.colindexes和storer.table.description对象中进行更改,

我使用Pandas创建了一个大型的索引HDF5表。我想重命名表中12列中的2列。我不希望重建/重新索引表

是否可以在不复制所有数据(140GB)的情况下执行此操作?我希望文件中只有几段元数据可以通过正确的命令轻松地交换出去


对我来说,这是因为我有一些“非自然”的列名,其中包含空格,直到尝试运行select语句时才意识到这是一个问题。

恐怕目前无法重命名索引(属于
数据列)
)列,因为这需要在
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
如果您尝试在google上搜索PyTables解决方案,您会发现这个问题,但没有答案允许您重命名列


所以,您可能想重新创建HDF5文件。

AFAIK目前还没有一种“公平”的方法来做到这一点,但您可以使用一个好主意——这似乎对我不起作用,可能是因为我有一个索引表。根据Jeff的破解,我修改了所有可以找到的“attrs”元数据——包括为我显示的一些额外字段——但是“select”仍然无法识别新的列名。当我使用s.get_storer('all').table.colindexes时,我看到列仍然使用旧名称命名。是的,对于索引列,您有更多的“家庭作业”。。。选中
store。获取要重命名的列的\u storer('all')
,并尝试重命名它们。再看一看,是的,我做了所有这些,但我找不到合适的位置。在store中查找。get_storer('all')使它看起来像是我重命名了所有列。但是,store.get\u storer('all').table会生成一个“tables.description.description”对象和一个“tables.table.ColIndexes”对象,该对象具有旧名称(即使在关闭/打开存储之后)。我不确定这些表内部的东西是从哪里得到列名的,但是(对我来说)它不在任何明显的地方,可以通过store.get\u storer('all').Table.attrs——所有这些元数据(包括“COL NAME\u dtype”等属性)有我的新列名。是的,我得出了相同的结论。我想知道这是PyTables的限制还是HDF5的限制。但现在看来唯一的解决方案是重新创建文件。