2014-12-08 2 views
1

팬더를 사용하여 hdf5 파일의 두 열을 비교하여 일부 행을 어떻게 선택할 수 있습니까? 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'), 즉 2'=='s? – EdChum

+0

@EdChum, 빠른 답장을 보내 주셔서 감사합니다. 그러나 'A = B'와 'A == B'모두 괜찮습니다. 오류는 다음과 같습니다. convert_value (self, v)의 c : \ python33 \ lib \ site-packages \ pandas \ computed \ pytables.py 184 반환 TermValue (int (v), v, kind) 185 elif kind == u ('integer') : -> 186 v = int (float (v)) 187 return TermValue (v, v, 종류) 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

이것은 간단한 경우에 적용됩니다. 그러나 비교할 열이 더 있다면 해결 방법은 무엇입니까? store.select_column ('df', 'C') = store.select_column ('df', 'B') 및 store.select_column ('df', ' store.select_column ('df', 'D') & store.select_column ('df', 'E') == 2). 이것은 .select_column을 여러 번 호출하기 때문에 작고 효율적이지 않을 수 있습니다. 맞습니까? – Lee

+0

난 열 사이 comparsion 꽤 ofen 사용하는 것 같아요. 그러나 관련 문서를 찾을 수 없습니다. 팬더는이 기능을 구현하지 않았습니다. – Lee

+0

단순히 메모리에 그것을 읽고 그것을 직접하십시오. 이것은 PyTables에 의해 구현되지 않습니다. 이렇게 쉬운 방법이 없습니다. – Jeff