使用hdf5表格格式存储多索引pandas数据帧

时间:2017-05-22 20:33:26

标签: python pandas hdf5 h5py

我在向我的pandas数据帧添加多索引时遇到了这个问题。我正在使用带有选项format='table'的pandas HDFStore,这是我更喜欢的,因为保存的数据框在不使用pandas时更容易理解和加载。 (有关详细信息,请参阅此答案:Save pandas DataFrame using h5py for interoperabilty with other hdf5 readers。)

但我遇到了一个问题,因为我在调用set_index时使用drop=False设置了多索引,这使索引列保持为dataframe列。在我使用format='table'将数据框放到商店之前,这很好。使用format='fixed'工作正常。但是format='table'给了我一个错误的重复列名。我在放置和恢复列之后删除冗余列,从而避免了错误。

这是我现在使用的写/读对函数:

def write_df_without_index_columns(store, name, df):
    if isinstance(df.index, pd.MultiIndex):
        # drop any columns that are duplicates of index columns
        redundant_columns = set(df.index.names).intersection(set(df.columns))
        if redundant_columns:
            df = df.copy(deep=True)
            df.drop(list(redundant_columns), axis=1, inplace=True)

    store.put(name, df,
              format='table',
              data_columns=True)

def read_df_add_index_columns(store, name, default_value):
    df = store.get(name)
    if isinstance(df.index, pd.MultiIndex):
        # remember the MultiIndex column names
        index_columns = df.index.names
        # put the MultiIndex columns into the data frame
        df.reset_index(drop=False, inplace=True)
        # now put the MultiIndex columns back into the index
        df.set_index(index_columns, drop=False, inplace=True)
    return df

我的问题:有更好的方法吗?我希望有一个包含数百万行的数据框,所以我不希望这个效率太低。

0 个答案:

没有答案