我使用熊貓來創建一個大的索引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