标签: hdfstore

获取HDF5内容列表(Pandas HDFStore)

从HDF5商店中的表格中选择内容没有问题:

with pandas.HDFStore(data_store) as hdf:
    df_reader = hdf.select('my_table_id', chunksize=10000)
Run Code Online (Sandbox Code Playgroud)

如何获取使用pandas选择的所有表的列表?

python hdf5 pandas hdfstore

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

如何将大量数据附加到Pandas HDFStore并获得自然的唯一索引?

我正在将大量的http日志(80GB +)导入到Pandas HDFStore中进行统计处理.即使在单个导入文件中,我也需要在加载内容时批量处理内容.到目前为止,我的策略是将解析后的行读入DataFrame,然后将DataFrame存储到HDFStore中.我的目标是让索引键对DataStore中的单个键唯一,但每个DataFrame再次重新启动它自己的索引值.我期待HDFStore.append()会有一些机制告诉它忽略DataFrame索引值,只是继续添加到我的HDFStore键的现有索引值,但似乎无法找到它.如何在HDFStore增加其现有索引值的同时导入DataFrame并忽略其中包含的索引值?以下示例代码每10行批处理.当然,真实的东西会更大.

if hd_file_name:
        """
        HDF5 output file specified.
        """

        hdf_output = pd.HDFStore(hd_file_name, complib='blosc')
        print hdf_output

        columns = ['source', 'ip', 'unknown', 'user', 'timestamp', 'http_verb', 'path', 'protocol', 'http_result', 
                   'response_size', 'referrer', 'user_agent', 'response_time']

        source_name = str(log_file.name.rsplit('/')[-1])   # HDF5 Tables don't play nice with unicode so explicit str(). :(

        batch = []

        for count, line in enumerate(log_file,1):
            data = parse_line(line, rejected_output = reject_output)

            # Add our source file name to the beginning.
            data.insert(0, source_name )    
            batch.append(data)

            if not (count % 10):
                df …
Run Code Online (Sandbox Code Playgroud)

python indexing dataframe pandas hdfstore

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

使用chunksize迭代地获取推断的数据帧类型

如何使用pd.read_csv()迭代地浏览文件并保留dtype和其他元信息,就好像我一次读入整个数据集一样?

我需要读入一个太大而无法放入内存的数据集.我想使用pd.read_csv导入文件,然后立即将块附加到HDFStore中.但是,数据类型推断对后续块没有任何了解.

如果存储在表中的第一个块仅包含int,并且后续块包含float,则会引发异常.所以我需要首先使用read_csv遍历数据帧并保留最高的推断类型.另外,对于对象类型,我需要保留最大长度,因为它们将作为字符串存储在表中.

是否存在仅在不读取整个数据集的情况下仅保留此信息的Pandonic方式?

python type-conversion pandas hdfstore

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

使用pandas将新列附加到HDFStore

我正在使用Pandas,并制作一个HDFStore对象.我计算500列数据,并将其写入表格式HDFStore对象.然后我关闭文件,从内存中删除数据,执行下一个500列(用增加的整数标记),打开商店,然后尝试追加新列.但是,它并不喜欢这样.它给了我一个错误

invalid combinate of [non_index_axes] on appending data [[(1, [500, 501, 502, ...])]] vs current table [[(1, [0, 1, 2, ...])]]
Run Code Online (Sandbox Code Playgroud)

我假设它只允许附加更多行而不是列.那么如何添加更多列?

hdf5 pandas hdfstore

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

从hdf文件中获取列名(标题)

我想知道如何获取hdf文件的列名(看似存储在hdf头中); 例如,一个文件可能有名为[a,b,c,d]的列,而另一个文件有列[a,b,c],而另一个文件有列[b,e,r,z]; 我想知道哪些有哪些.任何帮助将非常感谢!

python hdf5 pandas hdfstore

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

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文件中的行数

我想知道是否有一种轻松,快速,无需加载整个文件的方法,获取hdf5文件中的行数,使用pandas创建,使用pandas?

先感谢您!

hdf5 python-2.7 pandas hdfstore

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

如何处理在每个单元格中都有一个字典列表的熊猫列

我有一个 DataFrame,其中包含一个列,其中每个单元格都由一个 dicts 列表组成,并且每个 dicts 列表的长度不同(包括 0)。

一个例子:

df = pd.DataFrame({'ID' : [13423,294847,322844,429847], 'RANKS': [[{u'name': u'A', u'price': u'$1.00', u'rank': u'1'},
{u'name': u'B', u'price': u'$4.00', u'rank': u'2'},
{u'name': u'C', u'price': u'$3.99', u'rank': u'3'},
{u'name': u'D', u'price': u'$2.00', u'rank': u'4'},
{u'name': u'E', u'price': u'$2.50', u'rank': u'5'}],

[{u'name': u'AA', u'price': u'$1.99', u'rank': u'1'},
{u'name': u'BB', u'price': u'$6.99', u'rank': u'2'}],

[{u'name': u'Z', u'price': u'$0.99', u'rank': u'1'},
{u'name': u'Y', u'price': u'$10.00', u'rank': u'2'},
{u'name': u'X', u'price': u'$1.99', u'rank': u'3'}],[]], 'count' : [5,2,3,0]})
Run Code Online (Sandbox Code Playgroud)

请注意,“count”是“RANKS”中的字典数。我的目标是创建一系列额外的数据帧/表(每个“等级”一个)并将它们链接到 HDFStore 中的主表。就像是: …

pytables python-2.7 pandas hdfstore

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

在 HDFStore 组中存储多个对象

我想在 HDFStore 中存储多个对象,但我想通过分组来组织它。类似的东西:

import pandas as pd
my_store = pd.HDFStore('my_local_store.h5')
my_store._handle.createGroup('/', 'data_source_1') # this works, but I'm not sure what it does
my_store['/data_source_1']['part-1'] = pd.DataFrame({'b':[1,2,9,2,3,5,2,5]}) # this does not work
my_store['/data_source_1']['part-2'] = pd.DataFrame({'b':[3,8,4,2,5,5,6,1]}) # this does not work either
Run Code Online (Sandbox Code Playgroud)

python hdf5 pandas hdfstore

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

HDF5 min_itemsize 错误:ValueError:试图在 [y] 列中存储一个带有 len [##] 的字符串,但该列的限制为 [##]!

使用后出现以下错误 pandas.HDFStore().append()

ValueError: Trying to store a string with len [150] in [values_block_0] column but  this column has a limit of [127]!

Consider using min_itemsize to preset the sizes on these columns
Run Code Online (Sandbox Code Playgroud)

我正在创建一个 Pandas DataFrame 并将其附加到 HDF5 文件,如下所示:

import pandas as pd

store = pd.HDFStore("test1.h5", mode='w')

hdf_key = "one_key"

columns = ["col1", "col2", ... ]

df = pd.Dataframe(...)
df.col1 = df.col1.astype(str)
df.col2 = df.col2astype(int)
df.col3 = df.col3astype(str)
.... 
store.append(hdf_key, df, data_column=columns, index=False)
Run Code Online (Sandbox Code Playgroud)

我收到上面的错误:“ValueError:试图在 [values_block_0] 列中存储一个带有 len [150] 的字符串,但该列的限制为 [127]!”

之后,我执行代码: …

python hdf5 pytables pandas hdfstore

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