es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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’]

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Al escribir un DataFrame de pandas en hdf utilizando el método to_hdf, si el parámetro key 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 para key.

    Este comportamiento se produce porque la clave "table" se utiliza para almacenar los datos en un formato tabular, mientras que otros valores de cadena para key 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.

Comments are closed.