我认为标题涵盖了这个问题,但要阐明:
的熊猫 Python包具有用于在python保持表数据的数据帧的数据类型.它还有一个方便的hdf5文件格式接口,所以pandas DataFrames(和其他数据)可以使用简单的类似dict的界面保存(假设你安装了pytables)
import pandas
import numpy
d = pandas.HDFStore('data.h5')
d['testdata'] = pandas.DataFrame({'N': numpy.random.randn(5)})
d.close()
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是,如果我然后尝试将相同的hdf5加载到RI中,请看事情并非如此简单:
> library(hdf5)
> hdf5load('data.h5')
NULL
> testdata
$block0_values
[,1] [,2] [,3] [,4] [,5]
[1,] 1.498147 0.8843877 -1.081656 0.08717049 -1.302641
attr(,"CLASS")
[1] "ARRAY"
attr(,"VERSION")
[1] "2.3"
attr(,"TITLE")
[1] ""
attr(,"FLAVOR")
[1] "numpy"
$block0_items
[1] "N"
attr(,"CLASS")
[1] "ARRAY"
attr(,"VERSION")
[1] "2.3"
attr(,"TITLE")
[1] ""
attr(,"FLAVOR")
[1] "numpy"
attr(,"kind")
[1] "string"
attr(,"name")
[1] "N."
$axis1
[1] 0 1 2 3 …Run Code Online (Sandbox Code Playgroud) 有没有人想从h5py更新hdf5数据集?假设我们创建了一个数据集,如:
import h5py
import numpy
f = h5py.File('myfile.hdf5')
dset = f.create_dataset('mydataset', data=numpy.ones((2,2),"=i4"))
new_dset_value=numpy.zeros((3,3),"=i4")
Run Code Online (Sandbox Code Playgroud)
是否可以将dset扩展为3x3 numpy阵列?
Pandas有一个很好的界面,便于在HDF5中存储Dataframes和Series等内容:
random_matrix = np.random.random_integers(0,10, m_size)
my_dataframe = pd.DataFrame(random_matrix)
store = pd.HDFStore('some_file.h5',complevel=9, complib='bzip2')
store['my_dataframe'] = my_dataframe
store.close()
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试在同一个文件中保存一些其他常规Python对象,它会抱怨:
my_dictionary = dict()
my_dictionary['a'] = 2 # <--- ERROR
my_dictionary['b'] = [2,3,4]
store['my_dictionary'] = my_dictionary
store.close()
Run Code Online (Sandbox Code Playgroud)
同
TypeError: cannot properly create the storer for: [_TYPE_MAP] [group->/par
ameters (Group) u'',value-><type 'dict'>,table->None,append->False,kwargs-
>{}]
Run Code Online (Sandbox Code Playgroud)
如何在我存储其他Pandas对象的同一HDF5中存储常规Python数据结构?
我想在Python中进行分层键值存储,这基本上归结为将字典存储到文件中.我指的是任何类型的字典结构,可能包含其他字典,numpy数组,可序列化的Python对象等等.不仅如此,我希望它存储空间优化的numpy数组,并在Python 2和3之间发挥很好的作用.
以下是我所知道的方法.我的问题是这个清单中缺少什么,是否有一个替代方案可以躲过我所有的交易破坏者?
pickle模块(交易破坏者:大量膨胀numpy数组的大小)save/ savez/ load(致命弱点:不同的Python 2/3格式不兼容)PyTables的替代numpy.savez是有希望的,因为我喜欢使用hdf5的想法,它真的有效地压缩numpy数组,这是一个很大的优点.但是,它不需要任何类型的字典结构.
最近,我一直在做的是使用类似于PyTables替换的东西,但增强它以便能够存储任何类型的条目.这实际上工作得很好,但我发现自己在长度为1的CArrays中存储原始数据类型,这有点尴尬(并且对于实际的长度为1的数组来说是模棱两可的),即使我设置chunksize为1因此它不会占用很多空间.
那里有类似的东西吗?
谢谢!
我有一些大的netCDF文件,包含0.5度分辨率的地球的6小时数据.
每年有360个纬度点,720个经度点和1420个时间点.我有两个年度文件(12 GB ea)和一个110年数据(1.3 TB)的文件存储为netCDF-4(这里是1901年数据的一个例子,1901.nc,它的使用政策,以及原始,公共我开始使用的文件).
根据我的理解,从一个netCDF文件中读取它应该更快,而不是循环遍历由year和最初提供的变量分隔的文件集.
我想提取每个网格点的时间序列,例如从特定纬度和经度开始10或30年.但是,我发现这很慢.例如,从点位置读取10个值需要0.01秒,尽管我可以在0.002秒内从单个时间点读取10000个值的全局切片(维度的顺序是lat,lon,时间):
## a time series of 10 points from one location:
library(ncdf4)
met.nc <- nc_open("1901.nc")
system.time(a <- ncvar_get(met.nc, "lwdown", start = c(100,100,1),
count = c(1,1,10)))
user system elapsed
0.001 0.000 0.090
## close down session
## a global slice of 10k points from one time
library(ncdf4)
system.time(met.nc <- nc_open("1901.nc"))
system.time(a <- ncvar_get(met.nc, "lwdown", start = c(100,100,1),
count = c(100,100,1)))
user system elapsed
0.002 0.000 0.002
Run Code Online (Sandbox Code Playgroud)
我怀疑这些文件是为了优化空间层的读取而编写的,因为a)变量的顺序是lat,lon,time,b)这将是生成这些文件的气候模型的逻辑顺序和c)因为全局范围是最常见的可视化. …
在我们的实验室中,我们hdf5通过python包将数据存储在文件中h5py.
在实验开始时,我们在hdf5文件中的数组数组(以及其他内容)之后创建文件和存储数组.当实验失败或被中断时,文件未正确关闭.因为我们的实验从iPython对数据对象的引用运行在内存中(某处).
有没有办法扫描所有打开的h5py数据对象并关闭它们?
我使用python pandas读取一些大的CSV文件并将其存储在HDF5文件中,生成的HDF5文件大约为10GB. 阅读时会出现问题.即使我试图以块的形式读回来,我仍然得到MemoryError.
import glob, os
import pandas as pd
hdf = pd.HDFStore('raw_sample_storage2.h5')
os.chdir("C:/RawDataCollection/raw_samples/PLB_Gate")
for filename in glob.glob("RD_*.txt"):
raw_df = pd.read_csv(filename,
sep=' ',
header=None,
names=['time', 'GW_time', 'node_id', 'X', 'Y', 'Z', 'status', 'seq', 'rssi', 'lqi'],
dtype={'GW_time': uint32, 'node_id': uint8, 'X': uint16, 'Y': uint16, 'Z':uint16, 'status': uint8, 'seq': uint8, 'rssi': int8, 'lqi': uint8},
parse_dates=['time'],
date_parser=dateparse,
chunksize=50000,
skip_blank_lines=True)
for chunk in raw_df:
hdf.append('raw_sample_all', chunk, format='table', data_columns = True, index = True, compression='blosc', complevel=9)
Run Code Online (Sandbox Code Playgroud)
for df in pd.read_hdf('raw_sample_storage2.h5','raw_sample_all', chunksize=300000):
print(df.head(1))
Run Code Online (Sandbox Code Playgroud)
我正在尝试tables在Ubuntu 14.04中安装软件包但是sems就像是在抱怨.
我正在尝试使用PyCharm及其软件包安装程序来安装它,但是看起来它似乎在抱怨HDF5软件包.
但是,似乎我找不到任何hdf5要安装的软件包tables.
谁能解释一下这个程序?
我打开现有的HDF5文件来追加数据; 我想确保调用的组/A存在后续访问.我正在寻找一种简单的方法来创建/A条件(创建并返回新组,如果不存在,或返回现有组).一种方法是测试/A存在.我怎样才能有效地做到这一点?
根据API文档,我可以这样做:
H5::H5File h5file(filename,H5F_ACC_RDWR);
H5::H5Group grp;
try{
grp=h5file.openGroup("A");
} catch(H5::Exception& e){
/* group does not exists, create it */
grp=h5file.createGroup("A");
}
Run Code Online (Sandbox Code Playgroud)
但明显的丑陋来自这样一个事实,即例外用于传递信息,而这些信息根本不是特例.
有H5 :: CommonFG :: getObjinfo,它似乎以这样的方式包装H5Gget_objinfo,C例程的false(不存在)返回值抛出异常; 所以再次出现同样的问题.
在这种情况下,使用C API是否干净,或者是否有一些直接设计用于测试C++ API存在的函数,我忽略了?
我想了解导致我在以下情况下收到警告消息的原因:
在之前的操作中,我创建了一些 NetCDF 文件并使用xarray.to_netcdf().
在 jupyter 笔记本中对这些数据集进行惰性评估完全没问题,并且在以下情况下我不会收到警告/错误:
.nc通过打开这些文件ds = xarray.open_mfdataset('/path/to/files/*.nc')ds.time.valuesds.sel(time=starttime)我似乎能够在对内存加载的数据进行计算时做我想做的一切。但是,我经常在以下情况下收到相同的错误集:
ds.sel(time=starttime).SCALAR_DATA.plot()ts = pd.Series(ds.SCALAR_DATA.loc[:,y,x], index=other_data.index)请注意,尽管有这些警告,我执行的操作确实会产生预期的结果(绘图、时间序列结构等)。
生成以下错误的共同点似乎是从打开的数据集中加载数据。编辑:经过一些进一步的实验,我的工作环境中的软件包版本可能会导致依赖 HDF5 的软件包版本之间发生一些冲突。
以下错误重复多次。
HDF5-DIAG: Error detected in HDF5 (1.12.2) thread 1:
#000: H5A.c line 528 in H5Aopen_by_name(): can't open attribute
major: Attribute
minor: Can't open object
#001: H5VLcallback.c line 1091 in H5VL_attr_open(): attribute open failed
major: Virtual Object Layer
minor: Can't open object
#002: H5VLcallback.c line 1058 in H5VL__attr_open(): attribute open failed …Run Code Online (Sandbox Code Playgroud) hdf5 ×10
python ×7
pandas ×3
h5py ×2
netcdf ×2
pytables ×2
r ×2
c++ ×1
data.table ×1
io ×1
ipython ×1
netcdf4 ×1
numpy ×1
performance ×1
python-3.x ×1
ubuntu-14.04 ×1