Pandas 熊猫重命名会增大HDF文件大小
对于df.rename()方法和一般的重命名,我有一个相当复杂的问题。无论我如何尝试重命名现有数据帧中的列,结果HDF输出的大小都是原来的两倍。与大多数仅数字帧不同,我的帧包含许多被视为对象的unicode列 我尝试过以下几种情况,但所有这些似乎都会显著增加使用df.to_HDF(“some_file.h5”,“table”)生成的结果HDF文件 假设我有一个名为rename_dict的重命名字典,它看起来像:Pandas 熊猫重命名会增大HDF文件大小,pandas,hdf5,pytables,Pandas,Hdf5,Pytables,对于df.rename()方法和一般的重命名,我有一个相当复杂的问题。无论我如何尝试重命名现有数据帧中的列,结果HDF输出的大小都是原来的两倍。与大多数仅数字帧不同,我的帧包含许多被视为对象的unicode列 我尝试过以下几种情况,但所有这些似乎都会显著增加使用df.to_HDF(“some_file.h5”,“table”)生成的结果HDF文件 假设我有一个名为rename_dict的重命名字典,它看起来像: rename_dict = {'old_column': 'new_column'}
rename_dict = {'old_column': 'new_column'}
案例A(使用就地):
案例B(不在现场使用):
案例C(手动重新映射并删除):
我觉得我一定是对这种重命名操作是如何发生的,从而在HDF文件中创建额外数据缺少了一些重要的理解
我不确定这是否与此问题有关,但我确实收到了有关未映射到c类型的对象的性能警告。虽然这很糟糕,但在不应用任何重命名操作的情况下,文件大小是“正确的”,因此我认为这是根本原因
任何见解(或解决方案)都将被感激地接受。有关C,请参阅
简而言之,出于性能原因,删除实际上并不删除数据。重命名只是一个删除,后跟一个追加。您可以简单地ptrepack
文件以回收空间(或创建新空间)。HDF5不是常规数据库。它适用于某些类型的操作,即追加和查询
您应该尝试使用表
格式来消除这些警告。一般来说,您可能正在尝试存储非本地类型,这些类型会被腌制,请参阅
A和B是内存操作,与HDF5文件无关。同意A和B都在内存中。我正在将一个文件(.csv)读入内存,执行重命名,然后将其保存到HDF5。一旦我将重命名方法应用于帧,它将使输出大小加倍。如果省略重命名方法,则文件大小为一半。由于所有操作都是在内存中执行的,对HDF的写入只发生在最后,我似乎无法理解为什么重命名方法似乎会导致帧大小加倍,从而创建一个大小加倍的HDF文件。您是从一个空文件开始的吗?(例如,
mode='w'
),每次?,按定义追加表格。因此,如果您运行两次脚本,它将附加两次。您应该更新您的案例以反映正在发生的事情。你在做什么;df.to_hdf()并获取具有x
字节的文件。与df=pd.read_csv()相比代码>df=df.rename(列=rename_dict);df.to_hdf()`并获取一个具有2x
字节的文件?将第二个字节写入与第一个字节不同的文件,以确保它没有追加。ptrepack post hdf Write就是其中的诀窍。我仍然不确定为什么内存中的pandas操作会在HDF中显示出来,无论我是直接使用pd.to_HDF还是直接使用HDFStore,但这现在解决了我的问题。非常感谢。。。
df.rename(columns=rename_dict, inplace=True)
df_renamed = df.rename(columns=rename_dict)
df['new_name'] = df['old_name]
del df['old_name']