2012-10-16 13 views
5

csv를 pandas 데이터 프레임으로 읽는 방법에 대한 정보는 많이 있지만, 내가 갖고있는 것은 pyTable 테이블이며 pandas DataFrame이 필요합니다.Pytables in pandas DataFrame

내가 어떻게 내 팬더 ​​DataFrame 에 pytables를 저장하기 위해 발견했습니다 ... 그럼 내가 다시 읽고 싶어 읽기,이 시점에서 그것은해야합니다 :

"kind = v._v_attrs.pandas_type" 

내가 그것을 쓸 수 csv로하고 다시 읽으십시오.하지만 어리석은 것처럼 보입니다. 그것은 내가 지금하고있는 일입니다.

팬 테일로 필체를 어떻게 읽어야합니까? 팬더는 아직 사용할 수있는 dtypes의 전체 범위를 지원하지 않기 때문에

답변

5
import tables as pt 
import pandas as pd 
import numpy as np 

# the content is junk but we don't care 
grades = np.empty((10,2), dtype=(('name', 'S20'), ('grade', 'u2'))) 

# write to a PyTables table 
handle = pt.openFile('/tmp/test_pandas.h5', 'w') 
handle.createTable('/', 'grades', grades) 
print handle.root.grades[:].dtype # it is a structured array 

# load back as a DataFrame and check types 
df = pd.DataFrame.from_records(handle.root.grades[:]) 
df.dtypes 

, 당신의 U2 (부호없는 2 바이트 정수)를 I8 (정수 8 바이트)로 종료됩니다 것을주의하고, 문자열은 객체가 될 것입니다 Numpy 배열 용.

+0

감사합니다.하지만이 방법으로 팬더가 아닌 h5 파일에서 팬더 h5 파일로 데이터를 읽는 방법은 무엇입니까? 팬더 h5 파일에 임의의 데이터를 저장하는 것 같습니다. 필자의 소스 테이블을 'table in rec : for'와 같이 읽을 수는 있지만 'pandas_type'이 아니기 때문에 테이블은 pandas h5 파일이 아니라 단지 pytable 테이블이므로 pandas 소스로는 실패합니다. –

+0

잠깐 나는 이것과 함께 좀 더 시간을 보냈다. 내가해야 할 일은 기존의 파이 테이블 테이블에 여분의 데이터 타입 정보가있는 구조화 된 배열을 추가 한 다음 팬더 df로 가져올 것이라고 말하는 것입니까? 필자는 pyTables로 작업하는 법만 알고 있습니다 ... 리프 객체의 속성에 데이터 유형 정보를 유지합니다. 이 올바른 경우 판다 두 잎 개체에 연결하는 방법. (하나는 데이터 타입 정보, 하나는 데이터 테이블) –

+0

numpy를 np로 가져 오기 grades = np.empty ((10,2), dtype = (('name', 'S20'), ('grade' 'u2'))) 이것은 파이썬이 코드를 이해하지 못하는 버그 여야합니다. –

5

이제 문서에는 using the HDF5 store에 대한 훌륭한 섹션이 포함되어 있으며 cookbook에서 논의 된 몇 가지 고급 전략이 있습니다.

In [1]: store = HDFStore('store.h5') 

In [2]: print store 
<class 'pandas.io.pytables.HDFStore'> 
File path: store.h5 
Empty 

In [3]: df = DataFrame([[1, 2], [3, 4]], columns=['A', 'B']) 

In [4]: store['df'] = df 

In [5]: store 
<class 'pandas.io.pytables.HDFStore'> 
File path: store.h5 
/df   frame  (shape->[2,2]) 

그리고 HDF5/pytables에서 검색 :

지금은 비교적 간단합니다

In [6]: store['df'] # store.get('df') is an equivalent 
Out[6]: 
    A B 
0 1 2 
1 3 4 

할 수도 query within a table.