将 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
此解决方案将解决您的问题。然而,非常大的数据帧的计算效率是未知的。你应该在实施之前用你的数据进行测试。祝你好运。
比如我得到一个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
此解决方案将解决您的问题。然而,非常大的数据帧的计算效率是未知的。你应该在实施之前用你的数据进行测试。祝你好运。