2014-11-28 1 views
2

나는 chunk에서 데이터를 읽고 mySQL 테이블로 출력하려고하는 HDF5 파일을 가지고 있습니다. .hdf5에 팬더 이터레이터를 올바르게 사용하는 방법은 무엇입니까?

팬더 V를 사용하여 0.12.0 코드

iter = store.select('data',iterator=True, chunksize=5000) 
for data in iter: 
    # write the data out 

처럼 보인다하지만 예외가 얻을 :

for data in iter: 
    File "d:\python27\lib\site-packages\pandas\io\pytables.py", line 969, in __iter__ 
    v = self.func(current, stop) 
    File "d:\python27\lib\site-packages\pandas\io\pytables.py", line 451, in func 
    return s.read(where=where, start=_start, stop=_stop, columns=columns, **kwargs) 
    File "d:\python27\lib\site-packages\pandas\io\pytables.py", line 3175, in read 

    mgr = BlockManager([block], [cols_, index_]) 
    File "d:\python27\lib\site-packages\pandas\core\internals.py", line 1001, in __init__ 
    self._verify_integrity() 
    File "d:\python27\lib\site-packages\pandas\core\internals.py", line 1239, in _verify_integrity 
construction_error(tot_items,block.values.shape[1:],self.axes) 
    File "d:\python27\lib\site-packages\pandas\core\internals.py", line 2216, in construction_error 
tuple(map(int, [len(ax) for ax in axes])))) 
ValueError: Shape of passed values is (1, 5000), indices imply (1, 3751044) 

나는 오류가 말하고자하는 어떤 ValueError를 이해하지를 : 전달 된 값의 모양은 (1, 5000), 인덱스는 (1, 3751044)를 의미합니다. 그리고 나는 그것을 행복하게하는 방법을 모른다.

나는 chunkksize = 5000 값이 팬더에게 5000 개의 행 청크로 데이터를 읽으 리라고 생각했지만 분명히 반복을하는 것을 좋아하지 않는다. select (chunksize = XXXX)의 올바른 사용법은 무엇입니까?

+0

이것은 iterator <0.14에 많은 버그가 있으므로 현재 0.15.1로 업그레이드하는 것이 좋습니다. 그래도 사용법은 정확합니다. docs는 [여기] (http://pandas.pydata.org/pandas-docs/stable/io.html#iterator)입니다. 참고로, 당신은 데이터를 저장하기 위해''table'' 형식을 사용해야합니다. ''고정형 ''형식은 반복을 지원하지 않습니다 (저는 0.13을 사용했습니다.이 명명법을 사용하기 시작했습니다) – Jeff

+0

고마워요. 동일한 오류 0.15.1로 업그레이드되었습니다. 이번에는 비 호환성 경고가 나타났습니다. d : \ python27 \ lib \ site-packages \ pandas \ io \ pytables.py : 2966 : IncompatibilityWarning : 기준이 [0.0.0] 너무 오래되었거나 ( 정의되지 않음), 파일을 읽고 새 파일에 복사 ( copy_to 메서드 사용) 이 copy_to 메서드는 무엇을 의미합니까? –

+0

흠, 정말 오래된 버전입니다. (그 경고는 아마도 날짜가 맞았을 것입니다.) 당신은 당신이 가진 것을 더 많이 보여줄 필요가 있습니다. ''select()''에서 파일을 읽을 수 있습니까? (반복자 없음)? – Jeff

답변

1

나는 내 자신의 질문에 답하는 것을 싫지만 나중에 같은 문제로 나중에 올 수있는 다른 사람을 도울 수 있습니다.

Jeff가 언급했듯이 디스크의 PyTables HDF5 파일에는 팬더 메타 데이터가 없습니다. 그래서 내가 대신 한 일 :

h5file = tables.open_file(file, mode="r") 
signal_data = h5file.root.signal_data 
data_frame = pd.DataFrame.from_records(signal_data) 

이제 나는 필요에 따라 팬더에서 data_frame을 조작 할 수 있습니다.

덕분에 Jeff에게 감사드립니다.

관련 문제