【问题标题】:Empty pandas DataFrames saved with HDFStore make very large HDF files使用 HDFStore 保存的空 pandas DataFrame 会生成非常大的 HDF 文件
【发布时间】:2015-11-11 19:55:35
【问题描述】:

使用 pandas HDFStore 存储空 DataFrame 会消耗大量磁盘空间。这是一个例子:

import pandas as pd

for i in range(1000):
    with pd.HDFStore('/tmp/test_empty.hdf') as s:
        key = 'E{:03d}'.format(i)
        s[key] = pd.DataFrame()

for i in range(1000):
    with pd.HDFStore('/tmp/test_nan.hdf') as s:
        key = 'N{:03d}'.format(i)
        s[key] = pd.DataFrame([pd.np.nan])

文件大小:

$ ls -lh /tmp/test_empty.hdf /tmp/test_nan.hdf
.... 2.0G Nov 11 11:47 /tmp/test_empty.hdf
.... 5.5M Nov 11 11:47 /tmp/test_nan.hdf

包含单个 NaN 的 1000 个 DataFrame 消耗的空间比 1000 个空的 DataFrame 少 400 倍。是否有更有效的方法将密钥标记为 HDFStore 中的密钥? (空的 DataFrame 占用这么多空间是不直观的。)

【问题讨论】:

  • 我也遇到了这个问题,好像是bug

标签: python pandas pytables hdf


【解决方案1】:

我遇到了同样的问题,最后在 DataFrame 中添加了一个空列。

df = pd.DataFrame({'': []})
df.to_hdf('file_name.hdf', 'key')

加载后,检查这个DataFrame是否为空很简单

df_loaded = pd.read_hdf("file_name.hdf", "key")
df_loaded.empty # True

【讨论】:

  • 这看起来像是一个可用的解决方法。感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
相关资源
最近更新 更多