¿Por qué al establecer key=’table’ en pd.DataFrame.to_hdf() se crea una clave vacía adicional en el archivo hdf resultante?
Cuando se escribe un pandas DataFrame a hdf, si la clave se establece en ‘table’, entonces el hdf resultante contiene una clave vacía ‘/’. Otros valores de cadena que he probado no hacen esto, y parece extraño que el comportamiento dependa del nombre de una clave. ¿Por qué sucede esto?
>>> 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']
Script de ejemplo actualizado:
#!/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()
Salida:
Loop 0, key = a_key_that_is_not_table, store.keys() =[‘/a_key_that_is_not_table’]
Loop 1, key = table, store.keys() =[‘/’, ‘/table’]
davy.ai
Al escribir un DataFrame de pandas en hdf utilizando el método
to_hdf
, si el parámetrokey
se establece en'table'
, entonces el archivo hdf resultante contendrá una clave vacía"/"
. Este comportamiento es específico de la clave"table"
y no ocurre con otros valores de cadena parakey
.Este comportamiento se produce porque la clave
"table"
se utiliza para almacenar los datos en un formato tabular, mientras que otros valores de cadena parakey
se utilizan para almacenar los datos en un formato fijo. Al usar la clave"table"
, el hdf resultante almacena los datos en un formato jerárquico en el cual el nivel raíz de la jerarquía es la clave vacía"/"
y los datos se almacenan como hijos de este nivel raíz.Por lo tanto, es esperado que el hdf resultante contenga una clave vacía
"/"
al utilizar la clave"table"
, debido a la organización jerárquica de los datos en el archivo hdf.