考虑以下示例:
import string
import random
import pandas as pd
matrix = np.random.random((100, 3000))
my_cols = [random.choice(string.ascii_uppercase) for x in range(matrix.shape[1])]
mydf = pd.DataFrame(matrix, columns=my_cols)
mydf['something'] = 'hello_world'
store = pd.HDFStore('myfile.h5',complevel=9, complib='bzip2')
store['mydf'] = mydf
store.close()
mydf.to_csv('myfile.csv', sep=':')
结果是:
myfile.csv
5.6 MB大myfile.h5
11 MB大数据集越大,差异越大。
我尝试了其他压缩方法和级别。这是一个错误吗?(我正在使用Pandas 0.11和HDF5和Python的最新稳定版本)。
我从问题中得到的答案的副本:https :
//github.com/pydata/pandas/issues/3651
您的样本实在太小。HDF5具有相当大的开销,而且尺寸非常小(即使较小的一侧也有300k条目)。以下是两边都没有压缩的情况。浮点数实际上更有效地以二进制形式(以文本形式)表示。
此外,HDF5是基于行的。通过使表不是很宽但是很长,可以提高效率。(因此,您的示例在HDF5中根本不是很有效,请在这种情况下将其存储换位)
我通常有超过1000万行的表,查询时间可以是ms。甚至下面的例子也很小。拥有10GB以上的文件非常普遍(更不用说10GB以上仅需几秒钟的天文学专家!)
-rw-rw-r-- 1 jreback users 203200986 May 19 20:58 test.csv
-rw-rw-r-- 1 jreback users 88007312 May 19 20:59 test.h5
In [1]: df = DataFrame(randn(1000000,10))
In [9]: df
Out[9]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000000 entries, 0 to 999999
Data columns (total 10 columns):
0 1000000 non-null values
1 1000000 non-null values
2 1000000 non-null values
3 1000000 non-null values
4 1000000 non-null values
5 1000000 non-null values
6 1000000 non-null values
7 1000000 non-null values
8 1000000 non-null values
9 1000000 non-null values
dtypes: float64(10)
In [5]: %timeit df.to_csv('test.csv',mode='w')
1 loops, best of 3: 12.7 s per loop
In [6]: %timeit df.to_hdf('test.h5','df',mode='w')
1 loops, best of 3: 825 ms per loop
In [7]: %timeit pd.read_csv('test.csv',index_col=0)
1 loops, best of 3: 2.35 s per loop
In [8]: %timeit pd.read_hdf('test.h5','df')
10 loops, best of 3: 38 ms per loop
我真的不会担心大小(我怀疑您不是,只是感兴趣,这很好)。HDF5的要点是磁盘便宜,cpu便宜,但是您无法一次将所有内容都存储在内存中,因此我们通过分块进行优化
我试图导入多个CSV文件在一个特定的路径到数据集HDF5文件使用此代码: 但我有一个错误: 第15行,在帧=pd.concat(li,轴=0,ignore_index=True)文件/usr/本地/lib/python3.7/site-包/熊猫/核心/重塑/concat.py,第281行,在统一排序=排序,文件/usr/本地/lib/python3.7/site-包/熊猫/Core/reshape
请帮助选择如何存储消息: 1) 2) SET似乎比LIST更容易使用,但Redis会在每条消息中存储字段名,从而使内存使用量增加一倍吗?
只显示7-9个图像。 显示n个图像。 当我创建一个文件时,由于系统完全错误而导致写入错误。我试图创建符号链接。但是我不能搬动码头工人的东西。 删除/var/lib/docker/graph下的所有内容好吗?除了创建符号链接和扩展磁盘之外,还有什么其他可能性?我宁愿删除不必要的东西。
问题内容: 我有一个100M的CSV文件(实际上是许多单独的CSV文件),总计84GB。我需要将其转换为具有单个float数据集的HDF5文件。我在测试中使用 h5py 时没有任何问题,但是现在我无法在没有内存不足的情况下完成最终数据集。 如何在不必将整个数据集存储在内存中的情况下写入HDF5?我期望这里有实际的代码,因为它应该很简单。 我只是在研究 pytables ,但看起来数组类(与HDF5
问题内容: 我正在尝试计算这将占用多少空间(Mb)。在数据库表中,有7位列,2个微小的int和1个guid。 尝试计算将占用16000行的数量。 我的想法是,7位列占用1个字节,2个小整数占用2个字节,guid占用16个字节。表中的每一行总计19byte?那将意味着304000字节用于16000行,或者〜0.3mbs正确吗?是否还有元数据字节? 问题答案: 那里有几个估算器可以代替驴工作 您必须考
我试图使用Primefaces的客户端验证(CSV)样本很长时间,以获得HTML5的足迹效果,但经过大量搜索和多次尝试,我无法获得预期的结果。我遵循了所有的文档,包括在< code>web.xml中输入必要的参数,验证本身工作正常,但是足迹效应不起作用。 在web.xml中添加了参数: 在我的文档顶部,我使用超文本标记语言5文档的符号: > 尝试使用 WildFly 8.2.1 和现在的 Wild