Pandas rename膨胀HDF文件大小

时间:2014-05-05 18:09:03

标签: pandas hdf5 pytables

我对df.rename()方法有一个相当令人困惑的问题,并且通常会重命名。无论我如何尝试重命名现有数据帧中的列,生成的HDF输出的大小都会加倍。与大多数仅数字帧不同,我的帧确实包含许多被视为对象的unicode列。

我已经尝试过以下情况,但所有这些似乎都显着夸大了使用df.to_hdf(&#39; some_file.h5&#39;,&#39; table&#39;)生成的HDF文件。< / p>

假设我有一个名为rename_dict的重命名字典,如下所示:

rename_dict = {'old_column': 'new_column'}

案例A (使用就地):

df.rename(columns=rename_dict, inplace=True)

案例B (不使用inplace):

df_renamed = df.rename(columns=rename_dict)

案例C (手动重新映射和删除):

df['new_name'] = df['old_name]
del df['old_name']

我觉得我必须错过对重命名操作如何发生的一些重要理解,从而在HDF文件中创建额外的数据。

我不确定它是否与此问题相关,但我确实收到有关未映射到c类型的对象的性能警告。虽然这很糟糕,但没有应用任何类型的重命名操作,文件大小是&#34;正确&#34;所以我打算将其视为根本原因。

任何见解(或解决方案)都将被感激地接受。

1 个答案:

答案 0 :(得分:2)

对于C,请参阅here

简而言之,出于性能原因,删除操作实际上并未删除数据。重命名只是一个删除后跟一个追加。您只需ptrepack您的文件即可收回空间(或创建一个新空间)。 HDF5不是常规数据库。它适用于某些类型的操作,即追加和查询。

您应该尝试使用table格式来消除这些警告。一般情况下,您可能正在尝试存储非本机类型,这些类型会被 pickle ,请参阅here

A和B是内存中的操作,与HDF5文件无关。