我试图从Python中读取hdf5文件中的数据.我可以使用读取hdf5文件h5py,但我无法弄清楚如何访问文件中的数据.
import h5py
import numpy as np
f1 = h5py.File(file_name,'r+')
Run Code Online (Sandbox Code Playgroud)
这有效,文件被读取.但是如何访问文件对象中的数据f1呢?
当我尝试读取用h5py创建的HDF5格式文件时,我得到了pandas错误.我想知道我是不是做错了什么?
import h5py
import numpy as np
import pandas as pd
h5_file = h5py.File('test.h5', 'w')
h5_file.create_dataset('zeros', data=np.zeros(shape=(3, 5)), dtype='f')
h5_file.close()
pd_file = pd.read_hdf('test.h5', 'zeros')
Run Code Online (Sandbox Code Playgroud)
给出错误:TypeError:如果对象不存在也没有传递值,则无法创建存储器
我尝试将密钥集指定为'/ zeros'(就像我在阅读文件时使用h5py一样)而没有运气.
如果我使用pandas.HDFStore读取它,我会得到一个空的商店:
store = pd.HDFStore('test.h5')
>>> store
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
Empty
Run Code Online (Sandbox Code Playgroud)
用h5py读取刚刚创建的文件没有麻烦:
h5_back = h5py.File('test.h5', 'r')
h5_back['/zeros']
<HDF5 dataset "zeros": shape (3, 5), type "<f4">
Run Code Online (Sandbox Code Playgroud)
使用这些版本:
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
pd.__version__
'0.16.2'
h5py.__version__
'2.5.0'
Run Code Online (Sandbox Code Playgroud)
非常感谢,玛莎
这是一个示例数据框:
import pandas as pd
NaN = float('nan')
ID = [1, 2, 3, 4, 5, 6, 7]
A = [NaN, NaN, NaN, 0.1, 0.1, 0.1, 0.1]
B = [0.2, NaN, 0.2, 0.2, 0.2, NaN, NaN]
C = [NaN, 0.5, 0.5, NaN, 0.5, 0.5, NaN]
columns = {'A':A, 'B':B, 'C':C}
df = pd.DataFrame(columns, index=ID)
df.index.name = 'ID'
print(df)
A B C
ID
1 NaN 0.2 NaN
2 NaN NaN 0.5
3 NaN 0.2 0.5
4 0.1 0.2 NaN
5 0.1 0.2 …Run Code Online (Sandbox Code Playgroud) 我有一个巨大的HDF5文件,我想在pandas DataFrame中加载它的一部分来执行一些操作,但我有兴趣过滤一些行.
我可以通过一个例子更好地解释:
原始HDF5文件看起来像:
A B C D
1 0 34 11
2 0 32 15
3 1 35 22
4 1 34 15
5 1 31 9
1 0 34 15
2 1 29 11
3 0 34 15
4 1 12 14
5 0 34 15
1 0 32 13
2 1 34 15
etc etc etc etc
Run Code Online (Sandbox Code Playgroud)
我想要做的是将它完全按原样加载到pandas Dataframe中,但仅限于此 where A==1 or 3 or 4
到现在为止我可以使用以下方法加载整个HDF5:
store = pd.HDFStore('Resutls2015_10_21.h5')
df = pd.DataFrame(store['results_table'])
Run Code Online (Sandbox Code Playgroud)
我不知道如何在where这里包含一个条件.
我ValueError: No dataset in HDF5 file.在使用时得到一个:
In [1]: import pandas as pda
In [2]: store = pda.read_hdf('X.h5')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-72e9d80a2c5b> in <module>()
----> 1 store = pda.read_hdf('X.h5')
/usr/local/miniconda3/envs/tensorFlow-GPU/lib/python3.6/site-packages/pandas/io/pytables.py in read_hdf(path_or_buf, key, mode, **kwargs)
356 groups = store.groups()
357 if len(groups) == 0:
--> 358 raise ValueError('No dataset in HDF5 file.')
359 candidate_only_group = groups[0]
360
ValueError: No dataset in HDF5 file.
Run Code Online (Sandbox Code Playgroud)
h5dump 显示:
$ h5dump -n X.h5
HDF5 "X.h5" {
FILE_CONTENTS {
group …Run Code Online (Sandbox Code Playgroud) 我有一堆 hdf5 文件,我想将其中的一些数据转换为 parquet 文件。不过,我正在努力将它们读入 pandas/pyarrow 中。我认为这与文件最初创建的方式有关。
如果我使用 h5py 打开文件,数据看起来完全符合我的预期。
import h5py
file_path = "/data/some_file.hdf5"
hdf = h5py.File(file_path, "r")
print(list(hdf.keys()))
Run Code Online (Sandbox Code Playgroud)
给我
>>> ['foo', 'bar', 'baz']
Run Code Online (Sandbox Code Playgroud)
在本例中,我对“bar”组感兴趣,其中包含 3 个项目。
如果我尝试读取使用中的数据,HDFStore我将无法访问任何组。
>>> ['foo', 'bar', 'baz']
Run Code Online (Sandbox Code Playgroud)
那么该HDFStore对象就没有键或组。
import pandas as pd
file_path = "/data/some_file.hdf5"
store = pd.HDFStore(file_path, "r")
Run Code Online (Sandbox Code Playgroud)
如果我尝试访问数据,则会收到以下错误
assert not store.groups()
assert not store.keys()
Run Code Online (Sandbox Code Playgroud)
TypeError: cannot create a storer if the object is not existing nor a value are passed
Run Code Online (Sandbox Code Playgroud)
同样,如果我尝试使用pd.read_hdf它看起来文件是空的。
bar = store.get("/bar")
Run Code Online (Sandbox Code Playgroud)
ValueError: Dataset(s) …Run Code Online (Sandbox Code Playgroud)