Почему вывод Pandas df.to_hdf ("a_file", "a_key") увеличивается в размерах при многократном выполнении - PullRequest
0 голосов
/ 26 февраля 2019

У Панд есть метод .to_hdf() для сохранения dataframe в виде таблицы HDF.Однако каждый раз, когда запускается команда .to_hdf(path, key), размер файла увеличивается.

import os
import string
import pandas as pd
import numpy as np

size = 10**4
df = pd.DataFrame({"C":np.random.randint(0,100,size), 
                   "D": np.random.choice(list(string.ascii_lowercase), size = size)})
for iteration in range(4):
    df.to_hdf("a_file.h5","key1")
    print(os.path.getsize("a_file.h5"))

И вывод ясно показывает, что размер файла увеличивается:

# 1240552
# 1262856
# 1285160
# 1307464

Поскольку новый df сохраняется каждый раз, размер hdf должен быть постоянным.

Поскольку увеличение выглядит довольно скромным для малых df, при большем df это быстро приводит к файлам hdf, которые значительно больше, чем размер файла.файл при первом сохранении.

Размеры, которые я получаю с 10 ** 7 длинным фреймом данных после 7 итераций:

29MB, 48MB, 67MB, 86MB, 105MB, 125MB, 144MB

Почему так, что файл hdfразмер не постоянен и увеличивается каждый новый to_hdf()?

1 Ответ

0 голосов
/ 27 февраля 2019

Это поведение на самом деле не задокументировано, если вы быстро посмотрите на документацию (длина которой 2973 pdf).Но можно найти в # 1643 и в предупреждении в разделе IO Tools / удалить из таблицы в разделе документации: Если вы ничего не указали, по умолчаниюрежим записи 'a', что в случае простого df.to_hdf('a_path.h5','a_key') почти удваивает размер вашего hdf-файла при каждом запуске сценария.

Решение заключается виспользуйте режим записи: df.to_hdf('a_path.h5','a_key', mode = 'w')

Однако такое поведение будет происходить только с форматом fixed (который является форматом по умолчанию), но не с форматом table (кроме случаев, когда установлен appendдо True).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...