相关疑难解决方法(0)

HDFStore:table.select和RAM使用情况

我试图从大约1 GB的HDFStore表中选择随机行.当我要求大约50个随机行时,RAM使用率会爆炸.

我正在使用熊猫0-11-dev, python 2.7, linux64.

在第一种情况下,RAM使用量适合大小 chunk

with pd.get_store("train.h5",'r') as train:
for chunk in train.select('train',chunksize=50):
    pass
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,似乎整个表都被加载到RAM中

r=random.choice(400000,size=40,replace=False)
train.select('train',pd.Term("index",r))
Run Code Online (Sandbox Code Playgroud)

在最后一种情况下,RAM使用量与等效chunk大小相符

r=random.choice(400000,size=30,replace=False)    
train.select('train',pd.Term("index",r))
Run Code Online (Sandbox Code Playgroud)

我很困惑,为什么从30行随机移动到40行会导致RAM使用率急剧增加.

请注意,使用以下代码创建索引= range(nrows(table))时,表已被编入索引:

def txtfile2hdfstore(infile, storefile, table_name, sep="\t", header=0, chunksize=50000 ):
    max_len, dtypes0 = txtfile2dtypes(infile, sep, header, chunksize)

    with pd.get_store( storefile,'w') as store:
        for i, chunk in enumerate(pd.read_table(infile,header=header,sep=sep,chunksize=chunksize, dtype=dict(dtypes0))):
            chunk.index= range( chunksize*(i), chunksize*(i+1))[:chunk.shape[0]]
            store.append(table_name,chunk, min_itemsize={'values':max_len})
Run Code Online (Sandbox Code Playgroud)

感谢您的见解

编辑回答Zelazny7

这是我用来编写Train.csv到train.h5的文件.我用Zelazny7的代码编写了这个代码来自如何解决HDFStore异常:无法找到正确的原子类型

import pandas as pd
import numpy as np
from sklearn.feature_extraction import DictVectorizer


def object_max_len(x): …
Run Code Online (Sandbox Code Playgroud)

python pytables pandas hdfstore

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

Pandas 按索引从 HDF5 获取特定行

我有一个 pandas DataFrame,已写入 HDF5 文件。数据按时间戳索引,如下所示:

In [5]: df
Out[5]:
                          Codes   Price  Size
Time
2015-04-27 01:31:08-04:00     T  111.75    23
2015-04-27 01:31:39-04:00     T  111.80    23
2015-04-27 01:31:39-04:00     T  113.00    35
2015-04-27 01:34:14-04:00     T  113.00    85
2015-04-27 01:55:15-04:00     T  113.50   203
...                         ...     ...   ...
2015-05-26 11:35:00-04:00    CA  110.55   196
2015-05-26 11:35:00-04:00    CA  110.55    98
2015-05-26 11:35:00-04:00    CA  110.55   738
2015-05-26 11:35:00-04:00    CA  110.55    19
2015-05-26 11:37:01-04:00        110.55    12
Run Code Online (Sandbox Code Playgroud)

我想要的是创建一个可以传递 pandas DatetimeIndex 的函数,它将返回一个 DataFrame,其中包含 DatetimeIndex 中每个时间戳或之前的行。

我遇到的问题是,如果我正在查找超过 30 行,则串联的read_hdf查询将不起作用 - …

python hdf5 pandas

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

标签 统计

pandas ×2

python ×2

hdf5 ×1

hdfstore ×1

pytables ×1