微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 为什么在使用Pandas写入时,CSV文件小于HDF5文件?

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′.因此,表示数字所需的字符不多,因此字符串表示小于浮点表示.

解决方法:

对于.csv,您的方法存储如下字符:

999999,0.0<CR>

每个值最多11个字符.在100万的价值,这接近11MB.

HD5似乎将每个值存储为16字节浮点数,更别提它反复使用相同的值了.所以这是16字节* 1,000,000,大约是16 MB.

存储不是0.0,而是一些随机数据,.csv快速吹到25MB甚至更多,而HDF5文件保持相同的大小.虽然csv文件失去了准确性,但HDF5保留了它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐