pandas.DataFrame.to_hdf()不保存属性(元数据)

92dk7w1h  于 2023-06-20  发布在  其他
关注(0)|答案(2)|浏览(98)

在将pandas DataFrame保存到hdf5文件时,是否有方法保留其属性?我想将元数据与pandas DataFrame一起存储在hdf5文件中。
下面是一些简单的代码来说明问题:

import pandas as pd

df = pd.DataFrame(np.arange(10), columns=['data1'])
df.attrs.update({'test1':0,'test2':'this is a string'})
df.to_hdf('test.h5',key='df',complevel=9)
df_read = pd.read_hdf('test.h5')
df_read.attrs # this is an empty dict {} instead of what I created above
u5i3ibmn

u5i3ibmn1#

您可以使用HDFStore保存元数据:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(10), columns=['data1'])
df.attrs.update({'test1':0,'test2':'this is a string'})

# Save file
with pd.HDFStore('test.h5') as hdf_store:
   hdf_store.put('data', df, format='table')
   hdf_store.get_storer('data').attrs.metadata = df.attrs

# Load file and meta
with pd.HDFStore('test.h5') as hdf_store:
   metadata = hdf_store.get_storer('data').attrs.metadata
   df_read = hdf_store.get('data')
   # If you want to set up meta in the df again
   df_read.attrs.update(metadata)
dsf9zpds

dsf9zpds2#

将Pandas DataFrame保存到HDF5文件时,默认行为是仅保存数据,而不保留与DataFrame关联的属性和元数据。但是,您可以使用format='table'选项将DataFrame保存为支持存储元数据的PyTables表。
下面是保留了属性的代码的更新版本:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(10), columns=['data1'])
df.attrs.update({'test1': 0, 'test2': 'this is a string'})

# Save DataFrame with attributes using 'table' format
store = pd.HDFStore('test.h5')
store.put('df', df, format='table', complevel=9)
store.close()

# Read DataFrame with attributes
store = pd.HDFStore('test.h5')
df_read = store['df']
store.close()

print(df_read.attrs)  # Output: {'test1': 0, 'test2': 'this is a string'}

此代码使用pd.HDFStore类创建和管理HDF5文件。如果在保存DataFrame时指定format='table',则属性将与数据一起保留。当从HDF5文件中阅读DataFrame时,可以通过df_read.attrs访问这些属性,并包含先前设置的值。
请注意,使用“table”格式可能需要额外的依赖项,如pytables和numexpr。如果您愿意,可以使用pip install tables或pip install numexpr来安装它。

相关问题