import numpy as np
import pandas as pd
df = pd.DataFrame(data=np.zeros((1000000,1)))
df.to_csv('test.csv')
df.to_hdf('test.h5', 'df')
ls -sh test*
11M test.csv 16M test.h5
Если я использую еще больший набор данных, эффект будет еще больше. Использование HDFStore
, как показано ниже, ничего не меняет.
store = pd.HDFStore('test.h5', table=True)
store['df'] = np.zeros((1000000,1))
store.close()
Редактировать: Неважно. Пример плохой! Использование некоторых нетривиальных чисел вместо нулей меняет историю.
from numpy.random import rand
import pandas as pd
df = pd.DataFrame(data=rand(10000000,1))
df.to_csv('test.csv')
df.to_hdf('test.h5', 'df')
ls -sh test*
260M test.csv 153M test.h5
Выражение чисел в виде чисел с плавающей запятой должно занимать меньше байтов, чем их представление в виде строк символов с одним символом на цифру. В целом это верно, за исключением моего первого примера, в котором все числа равны «0,0». Таким образом, для представления числа требовалось не так много символов, поэтому строковое представление было меньше, чем представление с плавающей запятой.