2016-08-04 9 views
1

이 과정의 속도를 향상시킬 방법을 찾고 있습니다. 나는 그것을 작동 시키지만 완료하는 데는 며칠이 걸릴 것입니다.
나는 1 년 동안 매일 데이터 파일을 가지고 있습니다. 그리고 각 데이터 레이블 (데이터 태그)에 대한 노드가있는 단일 HDF5 파일로 결합하려고합니다.
데이터는 다음과 같습니다 : 다른 항목 번호, 각 데이터 태그에 대한 다른 업데이트 주파수가 있다는 것을팬더에서 CSV를 HDF5로 변환하는 속도를 높이십시오.

a,1468004920,986.078 
a,1468004921,986.078 
a,1468004922,987.078 
a,1468004923,986.178 
a,1468004924,984.078 
b,1468004920,986.078 
b,1468004924,986.078 
b,1468004928,987.078 
c,1468004924,98.608 
c,1468004928,97.078 
c,1468004932,98.078 

참고. 각각의 실제 데이터 파일에는 약 4 백만 개의 행과 약 4000 개의 태그 레이블이 각 단일 날짜 파일에 포함되어 있으며 1 년의 데이터가 있습니다.
다음 코드는 내가 원하는 것을 수행합니다. 그러나 모든 파일에 대해 실행하면 완료하는 데 며칠이 걸릴 것입니다.

기본적으로
import pandas as pd 
import datetime 
import pytz 
MI = pytz.timezone('US/Central') 

def readFile(file_name): 
    tmp_data=pd.read_csv(file_name,index_col=[1],names=['Tag','Timestamp','Value']) 
    tmp_data.index=pd.to_datetime(tmp_data.index,unit='s') 
    tmp_data.index.tz=MI 
    tmp_data['Tag']=tmp_data['Tag'].astype('category') 
    tag_names=tmp_data.Tag.unique() 
    for idx,name in enumerate(tag_names): 
     tmp_data.loc[tmp_data.Tag==name].Value.to_hdf('test.h5',name,complevel=9, complib='blosc',format='table',append=True) 

for name in ['test1.csv']: 
    readFile(name) 

, 난 할 노력하고있어하면 CSV 데이터를 "풀다"하는 것입니다, 각각의 태그는 HDF5 파일에서 분리 :이 속도를 제안 찾고 있어요. 그래서 나는 1 년 동안 hdf5 파일의 단일 리프에 "a"라는 태그가 붙은 모든 데이터를 가져오고 다음 리프 등으로 모든 "b"데이터를 가져 오려고합니다. 그래서 위의 코드를 각각 실행해야합니다. 365 개 파일. 압축을 시도하거나 압축하지 않고 시도했지만 index = False도 시도했습니다. 그러나 둘 다 커다란 영향을 미치지는 않았다.

답변

0

내가 이런 식으로 할 거라고 :

MI = pytz.timezone('US/Central') 

tmp_data=pd.read_csv('test1.txt',index_col=[1],names=['Tag','Timestamp','Value']) 
tmp_data.index=pd.to_datetime(tmp_data.index,unit='s') 
tmp_data.index.tz=MI 

hdf_key = 'my_key' 

store = pd.HDFStore('/path/to/file.h5') 

for loop which processes all your CSV files: 
    # pay attention at index=False - we want to index everything at the end 
    store.append(hdf_key, tmp_data, complevel=9, complib='blosc', append=True, index=False) 

# all CSV files have been processed, let's index everything... 
store.create_table_index(hdf_key, columns=['Tag','Value'], optlevel=9, kind='full') 
+0

내가 무엇을 제안하는 것은 인덱스 = 거짓을 사용하는 것입니다 생각합니다. 나는 많은 변화없이 노력했다. 그러나 코드는 루프에서 중요한 부분을 제거합니다. tmp_data는 내 CSV 데이터이며 각 파일에 대해 실제 코드에서 "test.txt"는 실제로 파일 이름을 저장하는 변수입니다. 그래서 저는 각 태그를 다른 노드에 집어 넣습니다. 코드는 전체 파일을 단일 노드에 저장합니다. – Adam

+0

명확히하기 위해, 방금 함수를 사용하기 위해 코드를 편집했습니다. 문제는 readFile을 더 빠르게 만드는 방법입니다. – Adam

관련 문제