我在pytables中有一个包含300多列的数据集,我希望能够轻松选择不同的子集.似乎没有一个非常优雅的解决方案,或者有什么我想念的?
我也很高兴有一种方法可以创建另一个表,它简单地对原始表中的选择列进行别名,这样我就可以拥有我的主表,然后是我的子集teables.有没有办法做到这一点?
我有一个包含大量数值的表,我知道我可以提取列并对其执行max(),但是可能有一种方法可以使用in-kernel方法来实现.但似乎无法找到它.
对 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, …我将所有数据都放入了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
然后我从我的所有表中选择日期为例如> 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 …我是 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
下一行:
r['trDate'] = datetime.datetime.strptime('1/1/12', "%m/%d/%y")
返回错误:
#TypeError: invalid type (<class 'datetime.datetime'>) for column ``trDate``
#> c:\users\me\desktop\untitled0.py(16)<module>()
和这一行:
r['trDate'] = '1/1/12'
产生相同的错误:
#TypeError: invalid type (<class 'str'>) for column ``trDate``
#> c:\users\me\desktop\untitled0.py(21)<module>()
如果我能走到这一步,我的最后一行将是:
r.append()
有什么建议?我找不到任何以这种方式使用 pytables 的工作示例,其中使用了“日期”类型的列。提前致谢...
我需要查询带有3个条件的子句的HDF5文件,where条件之一是长度为30的列表:
myList = list(xrange(30))
h5DF   = pd.read_hdf(h5Filename, 'df', where='index=myList & date=dateString & time=timeString')
上面的查询给了我ValueError: too many inputs,错误是可重现的。
如果我将清单的长度减少到29(三个条件):
myList = list(xrange(29))
h5DF   = pd.read_hdf(h5Filename, 'df', where='index=myList & date=dateString & time=timeString')
或条件数只能为两个(列表长度为30):
然后执行正常:
myList = list(xrange(30))
h5DF   = pd.read_hdf(h5Filename, 'df', where='index=myList & time=timeString')
这是已知限制吗?http://pandas.pydata.org/pandas-docs/dev/generated/pandas.io.pytables.read_hdf.html上的pandas文档没有提及此限制,在搜索此论坛后似乎没人遇到此限制。
版本是pandas 0.15.2。任何帮助表示赞赏。
我正在运行一个模型,将数据输出到多个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()
新的hdf5文件最终大约是原始文件大小的10%.文件中唯一的区别是所有NaN值不再相等(但都是numpy float64值).
我的问题是,如何NaN在现有的hdf5文件上实现文件大小减少(可能通过管理值)?有时候我不需要做上述程序,但无论如何我都是这样做的.是否有可以执行此操作的现有Pandas或PyTables命令?非常感谢你提前.
在“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
我发现目录中不再有libhdf5.9.dylib ,而是现在有libhdf5.10.dylib。
我可以毫无问题地卸载和安装hdf5 ,并且我还尝试重新安装table。
我不知道如何解决这个问题。
要将 HDF5 文件中的数据加载到内存中,可以使用 pandas.read_hdf 函数和要加载的列列表。然而,通过这种方式,整个表被加载到内存中,然后一些列被删除。因此初始内存使用量远大于数据的实际大小。
有没有办法只加载感兴趣的列?
PyTables是否支持存储Python对象?这样的事情:
dtype = np.dtype([('Name', '|S2'), ('objValue', object)])
data = np.zeros(3, dtype)
file.createArray(box3,'complicated',data)
我在尝试这样做时遇到错误...如何正确存储对象数组?有可能吗?谢谢
我有一系列包含大熊猫数据帧的 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
我想将一个带键的500GB-800GB表转储到HDF5中,然后检索与特定键匹配的行.
对于HDF5文件,像所有数据访问这样的项使用整数"行"数字,所以我似乎必须在HDF5之外实现"行号键映射".
这会有用吗?我是否需要访问内存(RAM)中的整个HDF5?
任何人都可以告诉我HDF5在这种情况下的表现有多糟糕吗?如果有合适的索引,这只是一本庞大的字典,对吧?
我应该使用其他东西吗?