2014-12-08 3 views
1

Как выбрать несколько строк, сравнив два столбца из файла hdf5 с помощью Pandas? Файл hdf5 слишком велик для загрузки в память. Например, я хочу выбрать строки, где столбец A и столбцы B равны. Файловый кадр сохраняется в файле 'mydata.hdf5'. Благодарю.выбирать строки, сравнивая столбцы с помощью HDFStore

import pandas as pd 
store = pd.HDFstore('mydata.hdf5') 
df = store.select('mydf',where='A=B') 

Это не работает. Я знаю, что store.select ('mydf', где = 'A == 12') будет работать. Но я хочу, чтобы сравнить столбец A и B. Пример данных выглядит следующим образом:

A B C 
1 1 3 
1 2 4 
. . . 
2 2 5 
1 3 3 
+0

Это опечатка: 'df = store.select ('mydf', где = 'A = B')'? не должно быть: 'df = store.select ('mydf', где = 'A == B')' i.e. 2 '==' s? – EdChum

+0

@EdChum, спасибо за ваш быстрый ответ. Но оба «A = B» и «A == B» в порядке. Ошибка следующая: c: \ python33 \ lib \ site-packages \ pandas \ computation \ pytables.py в convert_value (self, v) 184 return TermValue (int (v), v, kind) 185 elif kind == u ('integer'): -> 186 v = int (float (v)) 187 return TermValue (v, v, kind) 188 elif kind == u ('float'): ValueError: не удалось преобразовать строку в float: 'chr_b' – Lee

ответ

1

Вы не можете напрямую сделать это, но следующие будут работать

In [23]: df = DataFrame({'A' : [1,2,3], 'B' : [2,2,2]}) 

In [24]: store = pd.HDFStore('test.h5',mode='w') 

In [26]: store.append('df',df,data_columns=True) 

In [27]: store.select('df') 
Out[27]: 
    A B 
0 1 2 
1 2 2 
2 3 2 

In [28]: store.select_column('df','A') == store.select_column('df','B') 
Out[28]: 
0 False 
1  True 
2 False 
dtype: bool 

Это должно быть довольно эффективным.

+0

Это работает для простого случая. Но если у нас больше столбцов для сравнения, как его решить? data = store.select ('df', store.select_column ('df', 'A') == store.select_column ('df', 'B') & store.select_column ('df', 'C') < store.select_column ('df', 'D') & store.select_column ('df', 'E') == 2). Это может быть не компактным и эффективным, поскольку мы вызываем .select_column несколько раз, правильно? – Lee

+0

Я думаю, что сравнение между колонками довольно часто используется. Но я не могу найти какой-либо связанный документ. Панда не выполняет эту функцию, верно? – Lee

+0

просто прочитайте его в памяти и сделайте это прямо тогда. Это не реализовано PyTables. Так что нет простого способа сделать это. – Jeff

Смежные вопросы