标签: pytables

使用pytables选择列子集的最优雅方法是什么?

我在pytables中有一个包含300多列的数据集,我希望能够轻松选择不同的子集.似乎没有一个非常优雅的解决方案,或者有什么我想念的?

我也很高兴有一种方法可以创建另一个表,它简单地对原始表中的选择列进行别名,这样我就可以拥有我的主表,然后是我的子集teables.有没有办法做到这一点?

python hdf5 pytables

2
推荐指数
1
解决办法
1527
查看次数

在pytables中相当于"从表中选择最大值(列)"

我有一个包含大量数值的表,我知道我可以提取列并对其执行max(),但是可能有一种方法可以使用in-kernel方法来实现.但似乎无法找到它.

python sql pytables

2
推荐指数
1
解决办法
2118
查看次数

Numpy recarray 排序的列和堆栈

对 python 来说相对较新,所以请原谅我,如果这有一个我还没有找到的明显答案。

我正在将一些临时连续的二进制文件读入 numpy 记录数组,最终目标是将它们存储在 pytable 中。我预期的问题是这些文件可能并非都具有相同的字段或相同的字段顺序。我一直在寻找一个 numpy 函数,它可以使用字段标签或索引对 recarray 的列(而不是行)进行排序。更好的是一个函数可以为您执行此操作 - 并考虑丢失的列 - 当您将一个重新数组附加到另​​一个时。以下是我想到的示例:

#-------script------------
Myarray1 = np.array([(1,2,3),(1,2,3),(1,2,3)], {'names': ('a','b','c'), 'formats': ('f4', 'f4', 'f4')})
Myarray2 = np.array([(2,1,4,3),(2,1,4,3),(2,1,4,3)], {'names': ('b','a','d','c'), 'formats': ('f4', 'f4', 'f4', 'f4')})
Myarray3 = SomeColumnSortFunction(Myarray2, sortorder=[2,1,4,3])
Myarray4 = SomeBetterVerticalStackFunction(Myarray1,Myarray2)
#
print(Myarray1)
print()
print(Myarray2)
print()
print(Myarray3)
print()
print(Myarray4)

#---------- Wished for Output -------------
[(1.0, 2.0, 3.0) (1.0, 2.0, 3.0) (1.0, 2.0, 3.0)],
 dtype=[('a', 'i4'), ('b', 'i4'), ('c', 'i4')]

[(2.0, 1.0, 4.0, 3.0) (2.0, 1.0, 4.0, 3.0) (2.0, …
Run Code Online (Sandbox Code Playgroud)

python numpy pytables

2
推荐指数
1
解决办法
890
查看次数

使用chunksize保存到新的HDFStore中迭代HDFStore

我将所有数据都放入了HDFStore(是的!),但是如何将它从中获取...

我在我的HDFStore中保存了6个DataFrames作为frame_table.这些表中的每一个都如下所示,但长度不同(日期是朱利安日期).

>>> a = store.select('var1')
>>> a.head()
                      var1
x_coor y_coor date         
928    310    2006257   133
932    400    2006257   236
939    311    2006257   253
941    312    2006257   152
942    283    2006257    68
Run Code Online (Sandbox Code Playgroud)

然后我从我的所有表中选择日期为例如> 2006256的值.

>>> b = store.select_as_multiple(['var1','var2','var3','var4','var5','var6'], where=(pd.Term('date','>',date)), selector= 'var1')
>>> b.head()
                      var1   var2  var3  var4  var5  var6
x_coor y_coor date                                        
928    310    2006257   133  14987  7045    18   240   171
              2006273   136      0  7327    30   253   161
              2006289   125      0  -239    83   217   168
              2006305    95  14604  6786    13 …
Run Code Online (Sandbox Code Playgroud)

python pytables pandas

2
推荐指数
1
解决办法
1393
查看次数

如何将“日期”类型的值添加到 pytable 中?

我是 pytables 的新手,在尝试向用 pytables 创建的表添加日期类型值时遇到错误。这是我在做什么:

from tables import *
import csv
import datetime

class Test(IsDescription):
    trDate = Time32Col()

str = 'C:testTable.h5'
fileh = open_file(str, mode='w')
group = fileh.createGroup("/",'pricing','daily pricing and vol')
table = fileh.create_table(group,'nodeName',Test,'Pricing and volume')

r = table.row
Run Code Online (Sandbox Code Playgroud)

下一行:

r['trDate'] = datetime.datetime.strptime('1/1/12', "%m/%d/%y")
Run Code Online (Sandbox Code Playgroud)

返回错误:

#TypeError: invalid type (<class 'datetime.datetime'>) for column ``trDate``
#> c:\users\me\desktop\untitled0.py(16)<module>()
Run Code Online (Sandbox Code Playgroud)

和这一行:

r['trDate'] = '1/1/12'
Run Code Online (Sandbox Code Playgroud)

产生相同的错误:

#TypeError: invalid type (<class 'str'>) for column ``trDate``
#> c:\users\me\desktop\untitled0.py(21)<module>()
Run Code Online (Sandbox Code Playgroud)

如果我能走到这一步,我的最后一行将是:

r.append()
Run Code Online (Sandbox Code Playgroud)

有什么建议?我找不到任何以这种方式使用 pytables 的工作示例,其中使用了“日期”类型的列。提前致谢...

python hdf5 pytables pandas

2
推荐指数
1
解决办法
1702
查看次数

具有“ where”条件限制的熊猫read_hdf?

我需要查询带有3个条件的子句的HDF5文件,where条件之一是长度为30的列表:

myList = list(xrange(30))

h5DF   = pd.read_hdf(h5Filename, 'df', where='index=myList & date=dateString & time=timeString')
Run Code Online (Sandbox Code Playgroud)

上面的查询给了我ValueError: too many inputs,错误是可重现的。

如果我将清单的长度减少到29(三个条件):

myList = list(xrange(29))

h5DF   = pd.read_hdf(h5Filename, 'df', where='index=myList & date=dateString & time=timeString')
Run Code Online (Sandbox Code Playgroud)

条件数只能为两个(列表长度为30):

然后执行正常:

myList = list(xrange(30))

h5DF   = pd.read_hdf(h5Filename, 'df', where='index=myList & time=timeString')
Run Code Online (Sandbox Code Playgroud)

这是已知限制吗?http://pandas.pydata.org/pandas-docs/dev/generated/pandas.io.pytables.read_hdf.html上的pandas文档没有提及此限制,在搜索此论坛后似乎没人遇到此限制。

版本是pandas 0.15.2。任何帮助表示赞赏。

python hdf5 pytables pandas

2
推荐指数
1
解决办法
2970
查看次数

Pandas和HDF5中的文件大小减少

我正在运行一个模型,将数据输出到多个Pandas帧,然后将这些帧保存到HDF5文件.该模型运行数百次,每次都将新列(多索引)添加到现有HDF5文件的帧中.这是通过熊猫完成的merge.由于每次运行的帧长度不同,因此NaN帧中的值最多.

完成足够的模型运行后,如果行或列与出现错误的模型运行相关联,则会从帧中删除数据.在该过程中,新数据帧被放入新的HDF5文件中.以下伪python显示了这个过程:

with pandas.HDFStore(filename) as store:
    # figure out which indices should be removed
    indices_to_drop = get_bad_indices(store)

    new_store = pandas.HDFStore(reduced_filename) 
    for key in store.keys():
        df = store[key]
        for idx in indices_to_drop:
             df = df.drop(idx, <level and axis info>)
        new_store[key] = df
    new_store.close()
Run Code Online (Sandbox Code Playgroud)

新的hdf5文件最终大约是原始文件大小的10%.文件中唯一的区别是所有NaN值不再相等(但都是numpy float64值).

我的问题是,如何NaN在现有的hdf5文件上实现文件大小减少(可能通过管理值)?有时候我不需要做上述程序,但无论如何我都是这样做的.是否有可以执行此操作的现有Pandas或PyTables命令?非常感谢你提前.

python numpy hdf5 pytables pandas

2
推荐指数
1
解决办法
966
查看次数

库未加载:/usr/local/lib/libhdf5.9.dylib

在“brew升级”之后,我发现我无法在我的Mac上使用Pytables。

import tables as tb 
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-29-57032f570037> in <module>()
----> 1 import tables as tb

/usr/local/lib/python2.7/site-packages/tables/__init__.py in <module>()
 80 
 81 # Necessary imports to get versions stored on the cython extension
 ---> 82 from tables.utilsextension import (
 83     get_pytables_version, get_hdf5_version, blosc_compressor_list,
 84     blosc_compcode_to_compname_ as blosc_compcode_to_compname,

 ImportError: dlopen(/usr/local/lib/python2.7/site-packages/tables/utilsextension.so, 2): Library not loaded: /usr/local/lib/libhdf5.9.dylib
 Referenced from: /usr/local/lib/python2.7/site-packages/tables/utilsextension.so
 Reason: image not found
Run Code Online (Sandbox Code Playgroud)

我发现目录中不再有libhdf5.9.dylib ,而是现在有libhdf5.10.dylib

我可以毫无问题地卸载和安装hdf5 ,并且我还尝试重新安装table

我不知道如何解决这个问题。

homebrew hdf5 pytables

2
推荐指数
1
解决办法
3174
查看次数

使用Python仅将HDF5文件中的部分数据加载到内存中

要将 HDF5 文件中的数据加载到内存中,可以使用 pandas.read_hdf 函数和要加载的列列表。然而,通过这种方式,整个表被加载到内存中,然后一些列被删除。因此初始内存使用量远大于数据的实际大小。

有没有办法只加载感兴趣的列?

python hdf5 pytables h5py

2
推荐指数
1
解决办法
6539
查看次数

存储'对象'

PyTables是否支持存储Python对象?这样的事情:

dtype = np.dtype([('Name', '|S2'), ('objValue', object)])
data = np.zeros(3, dtype)
file.createArray(box3,'complicated',data)
Run Code Online (Sandbox Code Playgroud)

我在尝试这样做时遇到错误...如何正确存储对象数组?有可能吗?谢谢

python pytables

1
推荐指数
1
解决办法
945
查看次数

当我将数据分割为具有 30 个不同键的 30 个较小的数据帧时,为什么 hdf5 文件大小会急剧增加

我有一系列包含大熊猫数据帧的 hdf5 文件。一个典型的文件大约有 1000,000 行。我使用 complib='blosc',complevel=9 进行压缩。原始 hdf5 文件保存为 1 个平面文件。

然后,我尝试将数据帧逻辑分割为 30 个较小的数据帧,并将它们保存在具有 30 个不同键和相同压缩的同一个 hdf5 文件中。

令人震惊的问题是,具有 30 个较小数据帧的文件比平面文件大 40 倍。

平面 hdf5 文件保存如下:

dfx.to_hdf(file_name, key='opp',mode='a',complib='blosc',complevel=9, append=True)

分段的hdf5文件保存如下:

for i in range(30): dfx_small[i].to_hdf(file_name,key='d'+str(i), mode='a',complib='blosc',complevel=9

我做错了什么或者这个尺寸增加是预期的吗?

额外观察

我比较了生成为 1) 平面数据帧与 2)30 块数据帧的所有 hdf5 文件 - 当数据帧保存为 30 个较小的数据帧时,最大的文件大小似乎增加了 8 倍到 10 倍,同时较小的文件大小增加了 100 倍到 1000 倍。然后我尝试在压缩和不压缩的情况下保存 30 个块的 hdf5 文件。看来,当多个具有唯一键的数据帧放置在同一个 hdf5 文件中时,压缩几乎不起作用。我尝试了所有压缩选项,结果相似。

保存具有多个数据集的 hdf5 文件时存在压缩错误。

我添加了问题#45286

python hdf5 pytables h5py pandas

1
推荐指数
1
解决办法
2100
查看次数

使用PyTables索引500 GB HDF5文件

我想将一个带键的500GB-800GB表转储到HDF5中,然后检索与特定键匹配的行.

对于HDF5文件,像所有数据访问这样的项使用整数"行"数字,所以我似乎必须在HDF5之外实现"行号键映射".

这会有用吗?我是否需要访问内存(RAM)中的整个HDF5?

任何人都可以告诉我HDF5在这种情况下的表现有多糟糕吗?如果有合适的索引,这只是一本庞大的字典,对吧?

我应该使用其他东西吗?

python hdf5 bigdata pytables h5py

0
推荐指数
1
解决办法
846
查看次数

标签 统计

pytables ×12

python ×11

hdf5 ×8

pandas ×5

h5py ×3

numpy ×2

bigdata ×1

homebrew ×1

sql ×1