我是Python新手,对于在我的代码中存储数据的"最佳"方式可能是一个非常基本的问题.任何建议非常感谢!
我有一个很长的.csv文件,格式如下:
Scenario,Year,Month,Value
1,1961,1,0.5
1,1961,2,0.7
1,1961,3,0.2
etc.
Run Code Online (Sandbox Code Playgroud)
我的场景值从1到100,年份从1961年到1990年,月份从1到12.因此,我的文件有100*29*12 = 34800行,每行都有一个关联值.
我想把这个文件读成某种Python数据结构,这样我就可以通过指定'Scenario','Year'和'Month'来访问'Value'.请问最好的方法是什么(或者有哪些选择)?
在我的脑海中,我认为这些数据是一种带有轴,用于场景,年和月的"数字长方体",因此每个值都位于坐标(场景,年,月).出于这个原因,我很想尝试将这些值读入3D numpy数组,并使用Scenario,Year和Month作为索引.这是明智的做法吗?
我想我也可以创建一个字典,其中键是类似的
str(Scenario)+str(Year)+str(Month)
Run Code Online (Sandbox Code Playgroud)
这会更好吗?还有其他选择吗?
(通过'更好',我想我的意思是'访问速度更快',尽管如果一种方法比另一种方法的内存密集程度要低得多,那么也很了解它.
非常感谢!
我正在使用带有LZF压缩的h5py来将NumPy阵列存储在HDF5文件中.
它运行良好,我的压缩文件比未压缩文件更便携.但是,如果我尝试使用像vitables和HDFView这样的应用程序查看压缩文件,我会收到以下错误:
" 错误:读取记录时出现问题.数据集似乎是使用None库进行压缩.请检查它是否已安装在您的系统中,请 "在vitables和
" ncsa.hdf.hdf5lib.exceptions.HDF5Exception:ncsa.hdf.hdf5lib.exceptions.HDF5LibraryException:无法在HDFView中打开目录或文件 " .
我可以在两个应用程序中浏览文件结构OK,但打开数组会产生错误.如果我关闭压缩,问题就会消失.例如,在运行下面的代码后,打开array_1会给出错误,但array_2不会.
import numpy as np, h5py
h5_path = r'D:\test.h5'
f = h5py.File(h5_path, 'w')
# Create fake data
data = (np.random.random(1E6)*100).astype(int)
# Save with compression
dset1 = f.create_dataset(r'/path/to/arrays/array_1', data=data,
compression='lzf')
# Save without compression
dset2 = f.create_dataset(r'/path/to/arrays/array_2', data=data)
# Set some object properties
dset1.attrs['Description'] = 'Compressed array.'
dset2.attrs['Description'] = 'Uncompressed array.'
f.close()
Run Code Online (Sandbox Code Playgroud)
这种行为是期待的,还是我做错了什么?
如果vitables和HDFView无法打开压缩数组,是否有另一种查看器可以?
非常感谢!