跑步时
pd.read_hdf('myfile.h5')
我收到以下回溯错误:
[[......一些较长的追溯]]
read_array中的〜/ .local/lib/python3.6/site-packages/pandas/io/pytables.py(self,key,start,stop)2487 2488 if isinstance(node,tables.VLArray): - > 2489 ret = node [0] [start:stop] 2490 else:2491 dtype = getattr(attrs,'value_type',None)
getitem中的〜/ .local/lib/python3.6/site-packages/tables / vlarray.py(self,key)
阅读中的〜/ .local/lib/python3.6/site-packages/tables/vlarray.py(自我,开始,停止,步骤)
tables.hdf5extension.VLArray._read_array()中的tables/hdf5extension.pyx
ValueError:无法将WRITEABLE标志设置为此数组的True
不知道发生了什么.我已经尝试重新安装tables,pandas一切基本上,但不想阅读它.
这可能是一个愚蠢的问题,但我还没有在熊猫文档或其他地方找到答案.在此之前已经提出了同样的问题.但唯一的答案是看看大熊猫文档,正如我所说的那样,没有提供这个问题的答案.
我希望能够构建一个包含多个数据集的hdf文件.一旦关闭了这个hdf,我希望能够列出其中包含的每个数据集.例如:
import pandas as pd
import numpy as np
store = pd.HDFStore('test.h5')
df1 = pd.DataFrame(np.random.randn(10,2), columns=list('AB')
df2 = pd.DataFrame(np.random.randn(10,2), columns=list('AB')
store['df1'] = df1
store['df2'] = df2
print(store)
Run Code Online (Sandbox Code Playgroud)
返回:
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
/df1 frame (shape->[10,2])
/df2 frame (shape->[10,2])
Run Code Online (Sandbox Code Playgroud)
但是,如果您关闭hdf store.close()然后尝试使用pd.read_hdf()以下错误返回它:
ValueError: key must be provided when HDF contains multiple datasets.
Run Code Online (Sandbox Code Playgroud)
有没有办法返回所有这些数据集的列表?
在此先感谢您的帮助!
我正在尝试将MODIS 17数据文件读入R,操纵它们(裁剪等),然后将它们保存为geoTIFF.数据文件.hdf格式化,似乎没有一种简单的方法将它们读入R.
与其他主题相比,没有很多建议,其中大部分都是几年之久.其中一些还建议使用其他程序,但我想坚持使用R.
人们用什么包来处理.hdfR中的文件?
我有一个大的Pandas数据框(〜15GB,8300万行),我有兴趣另存为h5(或feather)文件。一列包含数字的长ID字符串,该字符串应具有字符串/对象类型。但是即使我确保熊猫将所有列解析为object:
df = pd.read_csv('data.csv', dtype=object)
print(df.dtypes) # sanity check
df.to_hdf('df.h5', 'df')
> client_id object
event_id object
account_id object
session_id object
event_timestamp object
# etc...
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
File "foo.py", line 14, in <module>
df.to_hdf('df.h5', 'df')
File "/shared_directory/projects/env/lib/python3.6/site-packages/pandas/core/generic.py", line 1996, in to_hdf
return pytables.to_hdf(path_or_buf, key, self, **kwargs)
File "/shared_directory/projects/env/lib/python3.6/site-packages/pandas/io/pytables.py", line 279, in to_hdf
f(store)
File "/shared_directory/projects/env/lib/python3.6/site-packages/pandas/io/pytables.py", line 273, in <lambda>
f = lambda store: store.put(key, value, **kwargs)
File "/shared_directory/projects/env/lib/python3.6/site-packages/pandas/io/pytables.py", line 890, in put
self._write_to_group(key, value, append=append, **kwargs) …Run Code Online (Sandbox Code Playgroud) 我有一个大型数据集(~600 GB)存储为HDF5格式.由于它太大而无法放入内存中,我想将其转换为Parquet格式并使用pySpark执行一些基本数据预处理(归一化,查找相关矩阵等).但是,我不确定如何将整个数据集转换为Parquet而不将其加载到内存中.
我看了这个要点:https://gist.github.com/jiffyclub/905bf5e8bf17ec59ab8f#file-hdf_to_parquet-py,但似乎整个数据集都被读入内存.
我想到的一件事是以块的形式读取HDF5文件并将其逐步保存到Parquet文件中:
test_store = pd.HDFStore('/path/to/myHDFfile.h5')
nrows = test_store.get_storer('df').nrows
chunksize = N
for i in range(nrows//chunksize + 1):
# convert_to_Parquet() ...
Run Code Online (Sandbox Code Playgroud)
但是我找不到任何允许我逐步构建Parquet文件的文档.任何进一步阅读的链接将不胜感激.
我想读取一些几 GB 的 HDF5 流。为了可移植性,我也想留在原生 Java 中。
我已经尝试过 Java HDF 对象包和 Java HDF5 接口 (JHI5),但这些是一些 JNI 解决方案(如果我找不到更好的选择,我可能会重新考虑)。
https://github.com/jamesmudd/jhdf是一个原生 Java 库,但不支持切片或流式传输,因此不适用于大文件。
原生 Java 中还有更多选择吗?
编辑:我发现了这个:https : //www.unidata.ucar.edu/software/netcdf-java/current/ 它支持切片但不支持流式传输。
我有HDF5文件,我想使用Python模块h5py打开(在Python 2.7中).
当我有一个包含组和数据集的文件时,这很容易:
import h5py as hdf
with hdf.File(relative_path_to_file, 'r') as f:
my_data = f['a_group']['a_dataset'].value
Run Code Online (Sandbox Code Playgroud)
但是,在我目前的情况下,我没有团体.只有数据集.不幸的是,无论我尝试什么,我都无法访问我的数据.以下工作都没有(全部中断KeyErrors或ValueErrors):
my_data = f['a_dataset'].value #KeyError
my_data = f['/a_dataset'].value #KeyError
my_data = f['/']['a_dataset'].value #KeyError
my_data = f['']['a_dataset'].value #ValueError
my_data = f['.']['a_dataset'].value #KeyError
Run Code Online (Sandbox Code Playgroud)
如果没有解决方案,我可以重新制作我的文件以拥有一个组.看起来应该有一个解决方案,但......
似乎h5py没有看到任何键:
f.keys()
[]
Run Code Online (Sandbox Code Playgroud) 我想在内存中获取一个数据帧作为 hdf。下面的代码导致“AttributeError: '_io.BytesIO' object has no attribute 'put'”。我正在使用 python 3.5 和 Pandas 0.17
import pandas as pd
import numpy as np
import io
df = pd.DataFrame(np.arange(8).reshape(-1, 2), columns=['a', 'b'])
buf = io.BytesIO()
df.to_hdf(buf, 'some_key')
Run Code Online (Sandbox Code Playgroud)
更新:正如 UpSampler 指出的那样,“path_or_buf”不能是 io 流(我觉得这很令人困惑,因为 buf 通常可以是 io 流,请参阅to_csv)。除了写入磁盘并将其读回之外,我可以在内存中获取数据帧作为 hdf 吗?
我有一大堆通过 h5py 与 hdf 文件交互的代码。该代码已运行多年。最近,随着 python 环境的变化,我收到了这个新的错误消息。
IOError: Unable to open file (unable to lock file, errno = 11, error message = 'Resource temporarily unavailable')
有趣的是,该错误在某些地方间歇性地发生,而在其他地方持续发生。在经常发生这种情况的地方,我查看了我的代码并确认没有其他 h5py 实例连接到该文件,并且最后一个连接已正确刷新和关闭。同样,在环境发生变化之前,这一切都运行良好。
以下是我的 conda 环境中的片段:
h5py 2.8.0 py27h470a237_0 conda-forge
hdf4 4.2.13 0 conda-forge
hdf5 1.10.1 2 conda-forge