将 Pandas 自动排序附加到数据帧的新数据(hdf5 格式)

Will Pandas auto sort new data appended to a dataframe (in hdf5 format)

比如我得到一个df1,index从20200101到20210101,dtype是DateTime,我已经把这个df保存到h5中了(格式是table)。 然后得到一个新的df2,index从20200101到20200201,在df1的index中间。 如果我将 df2 附加到这个 h5,它会自动排序索引吗?

编写示例来演示行为和解决方案非常容易。

下面的代码创建了 2 个奇数和偶数数据帧,并将它们写入 Table 格式的 HDF5 文件,如 key='test_data'。 (附加数据需要 Table 格式。)当你 运行 时,你会看到奇数在前,然后是偶数(不是自动排序)。

col2 = [ x for x in range(1,53,2)]
col3 = [ float(x) for x in range(1,53,2)]

df1 = pd.DataFrame({'col_int': col2, 'col_float': col3})
df1.to_hdf('SO_70731279.h5',key='test_data',mode='w', format='table',
           data_columns=True)

col2 = [ x for x in range(2,54,2)]
col3 = [ float(x) for x in range(2,54,2)]

df2 = pd.DataFrame({'col_int': col2, 'col_float': col3})
df2.to_hdf('SO_70731279.h5',key='test_data',mode='a', format='table',
           data_columns=True, append=True)

此代码将数据从 key='test_data' 读取到 df3,就地对数据帧进行排序,然后使用 key='sorted_data' 写入 HDF5 文件。 运行 这和你会看到 HDF5 文件中的这个数据是按升序排列的。

df3 = pd.read_hdf('SO_70731279.h5',key='test_data',columns=['col_int','col_float'])
df3.sort_values('col_int',inplace=True,ignore_index=True)
df3.to_hdf('SO_70731279.h5',key='sorted_data',mode='a', format='table',
           data_columns=True)

如果你想替换 key='test_data' 中的数据,你必须将 df3 写入密钥并且不包括 append=True。这将覆盖密钥。

df3.to_hdf('SO_70731279.h5',key='test_data',mode='a', format='table',
           data_columns=True)  ## Note append=True is missing on this call

此解决方案将解决您的问题。然而,非常大的数据帧的计算效率是未知的。你应该在实施之前用你的数据进行测试。祝你好运。