2017-12-28 39 views
1

큰 (~ 10 GB) hdf5 테이블에서 pandas.read_hdf를 읽었습니다. iterator = True를 사용하여 한 번에 청크에 액세스 할 수 있습니다 (예 : 한 번에 chunksize = 100000 행).Pandas read_hdf : chunkksize 또는 iterator를 사용할 때 열 이름을 얻는 방법?

모든 열 이름 또는 '키'목록을 가져 오는 방법은 무엇입니까?

또한 어떻게 pandas.read_table과 유사한 get_chunk 메소드가 없습니까? 청크를 통해 직접적으로 유일한 방법 ("데이터 청크"용)을 반복하고 있으며, 다른 번호 매기기 청크에 자유롭게 액세스 할 수 없습니다 ("데이터 [300]")?

편집 :

for i,v in enumerate(data): 
if i != 0: 
    break 
colnames = v.columns 

하지만 내 두 번째 질문은 여전히 ​​남아있다 : ​​내가 처음 덩어리를 접속하여 나누기 루프와 열 이름에 액세스 할 수 있습니다처럼

이 보이는 액세스 할 수있는 방법은 없습니다 위의 이상한 단일 반복 반복을 수행하는 대신 팬더 TextFileReader 반복자 (예 : read_table의 get_chunk 메소드 또는 dict 유사 조회, 데이터 [0])를 모방 한 개별 조각?

답변

1

HDFStore으로 HDF5 파일을로드 해 보았습니까? 그렇게하면 원하는 것을 할 수있는 HDFStore.select 방법을 사용할 수 있습니다 (검색 등). select을 사용하면 열의 하위 집합에 대해서만 조작 할 수도 있습니다. 내게 그것은 단지 read_hdf 기능보다 더 많은 유연성을 제공하는 것처럼 보입니다. 당신이 당신의 HDF5 파일의 구조를 알고있는만큼 도움이 될 수 있습니다 다음과 같은 : 당신은 또한 예를 들어, 컨텍스트 매니저, 같은 HDFStore을 열 수 있습니다

store = pd.HDFStore('/path/to/file', 'r') 
colnames = store.select('table_key', stop=1).columns 

# iterate over table chunks 
chunksize = 100000 
chunks = store.select('table_key', chunksize=chunksize) 
for chunk in chunks: 
    ...code... 

# select 1 specific chunk as iterator 
chunksize = 100000 
start, stop = 300*chunksize, 301*chunksize 
this_chunk = store.select('table_key', start=start, stop=stop, iterator=True) 
do_work(this_chunk) 

store.close() 

주,

with pd.HDFStore('/path/to/file', 'r') as store: 
    ...code... 
+0

최고 감사합니다! – quantumflash