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
数値を float として表現すると、1 桁あたり 1 文字の文字列として数値を表現するよりもバイト数が少なくて済みます。これは、すべての数値が '0.0' であった最初の例を除いて、一般的に当てはまります。したがって、数値を表すのに多くの文字は必要なく、文字列表現は float 表現よりも小さくなりました。