將 Pandas DataFrame 寫入 hdf 時,如果鍵設定為“table”,則生成的 hdf 包含一個空鍵“/”。我嘗試過的其他字串值不這樣做,而且行為取決于鍵的名稱似乎很奇怪。為什么會發生這種情況?
>>> import pandas as pd
>>> df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
>>> df.to_hdf('hdf1', key='a_key_that_is_not_table')
>>> df.to_hdf('hdf2', key='table')
>>> store1 = pd.HDFStore('hdf1')
>>> store2 = pd.HDFStore('hdf2')
>>> store1.keys()
['/a_key_that_is_not_table']
>>> store2.keys()
['/', '/table']
更新的示例腳本:
#!/usr/bin/python3
import pandas as pd
df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
keys = ['a_key_that_is_not_table', 'table']
for idx, key in enumerate(keys):
filename = f'df{idx}.h5'
df.to_hdf(filename, key=key, mode='w', format='table')
store = pd.HDFStore(filename)
print(f'Loop {idx}, key = {key}, store.keys() ={store.keys()}')
store.close()
輸出:
Loop 0, key = a_key_that_is_not_table, store.keys() =['/a_key_that_is_not_table']
Loop 1, key = table, store.keys() =['/', '/table']
uj5u.com熱心網友回復:
每個 HDF5 檔案都有一個參考為“/”的“根組”。如果您使用 HDFView 檢測這兩個檔案,您會發現每個檔案都有 1 個組('/a_key_that_is_not_table在檔案 df0.h5 和'/table'檔案 df1.h5 中名為' ),因此,從 HDF5 架構的角度來看,這不是錯誤。
深入研究這些檔案,我懷疑問題出在 PyTables 之上的 Pandas 抽象層。這兩個檔案具有相同的架構。在每個命名鍵(HDF5 組)下都有一個名為'_i_table'的組,它有一個名為 的子組'index'和一個名為 的資料集'table'。Likely'table'是一個保留名稱,將其用作鍵會觸發 Pandas 鍵名稱邏輯。更改'table'為'Table'消除'/'df1.h5 的輸出中的 。
uj5u.com熱心網友回復:
您需要指定檔案的格式。另外,我認為您需要向函式添加“w”(寫入)模式,因為默認模式設定為“a”(追加)。例如 :
df.to_hdf('data.h5', key='df', mode='w')
如果您需要查看更多資訊:https : //pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_hdf.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/392644.html
下一篇:在資料框列中的字串周圍添加雙引號
