Pandas 重命名会增加 HDF 文件大小

标签 pandas hdf5 pytables

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

我尝试了以下情况,但所有情况似乎都显着夸大了使用 df.to_hdf('some_file.h5', 'table') 生成的结果 HDF 文件。

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

rename_dict = {'old_column': 'new_column'}

情况 A(就地使用):

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

情况 B(不使用就地):

df_renamed = df.rename(columns=rename_dict)

情况 C(手动重新映射和删除):

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

我觉得我一定缺少对重命名操作如何发生以及如何在 HDF 文件中创建额外数据的一些重要理解。

我不确定它是否与此问题相关,但我确实收到了有关未映射到 c 类型的对象的性能警告。尽管这很糟糕,但在不应用任何类型的重命名操作的情况下,文件大小是“正确的”,因此我不认为这是根本原因。

任何见解(或解决方案)将不胜感激。

最佳答案

对于 C,请参阅 here

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

您应该尝试使用table格式来消除这些警告。一般来说,您可能会尝试存储非本地类型,这些类型会被腌制,请参阅 here

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

关于Pandas 重命名会增加 HDF 文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23478923/

相关文章:

Python pandas 停留在 0.7.0 版本

python - 从 Pandas 的日期时间列中提取日期和小时

python - 类型错误 : This COM object can not automate the makepy process - please run makepy manually for this object

python - 在 Pandas 中重命名 "None"值

python - 如何从数据文件中读取指定间隔的行?

python - 获取区域包围的第一个和最后一个值的索引

lua - 在Torch中将表写入文件

python - 如何将多个 NumPy 数组输入 Keras 中的深度学习网络?

python - DataFrame 性能警告

python - 使用 numexpr 的欧几里德范数