2016-08-04 7 views
1

私はこのプロセスをスピードアップする方法を探しています。私はそれが機能しているが、それは完了するまでに何日もかかるだろう。
私は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 

注:
データは次のようになります。実際のデータファイルにはそれぞれ約400万行、約4000個の異なるタグラベルが各1日のファイルに存在し、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ファイルの1つの葉にタグ "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

私は何を示唆していることは、インデックス= Falseのを使用することであると思います。私はそれほど変わらずに試しました。しかし、あなたのコードはループから重要な部分を削除します。 tmp_dataは私のcsvデータであり、各ファイルについて、私の実際のコードでは "test.txt"は実際にファイル名を置く変数です。だから、私はそれぞれのタグを別のノードに入れます。あなたのコードは、ファイル全体を1つのノードに置きます。 – Adam

+0

明確にするために、私はコードを編集して関数を使用しました。問題は、readFileをより高速にする方法です。 – Adam

関連する問題