daskでcsvファイの読み込みを高速化(datetime64型でindexの列を設定)
daskでcsvファイの読み込みを高速化してみました。
使ってみると、もっと早くdaskを使っていればと後悔。
まずはdaskをimportして、
import dask.dataframe as dd
read_csv().compute()で読み込みます。
このとき、pandasで指定できたindex_colは指定できないことに注意が必要です。
data = dd.read_csv('csv.txt', usecols=[0,1], names=('date', 'val') ).compute()
なので、date列をdatetime64型に変換して上書きします。
data['date'] = pd.to_datetime(data['date'], format='%Y%m%d%H%M%S')
そして、date列をindexに設定します。
data = data.set_index('date')
サンプルコード
例えば、下記のin.txtがあったとします。
$ cat csv.txt 20160601010101,3 20160601010103,4 20160602010153,8
下記がサンプルコードになります。
$ cat sample.py #!/usr/bin/env python3 # coding: UTF-8 import pandas as pd import dask.dataframe as dd import datetime import time start = time.time() data = dd.read_csv('csv.txt', usecols=[0,1], names=('date', 'val') ).compute() data['date'] = pd.to_datetime(data['date'], format='%Y%m%d%H%M%S') data = data.set_index('date') print(data)
下記が実行結果になります。
$ ./sample.py val date 2016-06-01 01:01:01 3 2016-06-01 01:01:03 4 2016-06-02 01:01:53 8