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
