统计软件Stata允许将短文本片段保存在数据集中。这可以使用 notes
来完成。和/或 characteristics
.
这对我来说很有值(value),因为它允许我保存各种信息,从提醒和待办事项列表到有关我如何生成数据的信息,甚至是特定变量的估计方法曾是。
我现在正在尝试在 Python 3.6 中提供类似的功能。到目前为止,我已经在网上查看并查阅了许多帖子,但是这些帖子并没有完全解决我想要做的事情。
一些引用帖子包括:
What is the difference between save a pandas dataframe to pickle and to csv?
What is the fastest way to upload a big csv file in notebook to work with python pandas?
对于一个小的 NumPy
数组,我得出的结论是函数 numpy.savez()
的组合dictionary
可以将所有相关信息充分存储在一个文件中。
例如:
a = np.array([[2,4],[6,8],[10,12]])
d = {"first": 1, "second": "two", "third": 3}
np.savez(whatever_name.npz, a=a, d=d)
data = np.load(whatever_name.npz)
arr = data['a']
dic = data['d'].tolist()
但是,问题仍然存在:
是否有更好的方法可以将其他信息片段合并到包含 NumPy
数组或(大)Pandas
DataFrame的文件中
?
我特别有兴趣了解您可能通过示例提出的任何建议的特定优点和缺点。依赖项越少越好。
最佳答案
有很多选择。我将只讨论 HDF5,因为我有使用这种格式的经验。
优点:便携(可以在 Python 之外读取)、原生压缩、内存不足功能、元数据支持。
缺点:依赖单一的低级C API,作为单个文件可能会损坏数据,删除数据不会自动减小大小。
根据我的经验,为了性能和可移植性,避免 pyTables
/HDFStore
存储数字数据。您可以改用 h5py
提供的直观界面。 .
存储一个数组
import h5py, numpy as np
arr = np.random.randint(0, 10, (1000, 1000))
f = h5py.File('file.h5', 'w', libver='latest') # use 'latest' for performance
dset = f.create_dataset('array', shape=(1000, 1000), data=arr, chunks=(100, 100),
compression='gzip', compression_opts=9)
压缩和分 block
有很多压缩选择,例如blosc
和 lzf
分别是压缩和解压缩性能的不错选择。注意 gzip
是原生的;默认情况下,您的 HDF5 安装可能不附带其他压缩过滤器。
分 block 是另一种选择,当它与您从内存中读取数据的方式保持一致时,可以显着提高性能。
添加一些属性
dset.attrs['Description'] = 'Some text snippet'
dset.attrs['RowIndexArray'] = np.arange(1000)
存储字典
for k, v in d.items():
f.create_dataset('dictgroup/'+str(k), data=v)
内存不足访问
dictionary = f['dictgroup']
res = dictionary['my_key']
没有什么可以替代阅读 h5py
documentation ,它公开了大部分 C API,但您应该从上面看到有很大的灵 active 。
关于python - 将数组或 DataFrame 与其他信息一起保存在文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49740190/