Как я могу ускорить мой код с Dask в Python? - PullRequest
0 голосов
/ 26 марта 2019

Я попытался открыть файл csv.gzip с помощью Dask в Python.Я объясню свой код шаг за шагом.

Сначала я открываю файл с помощью dask.dataframe.read_csv. На этом шаге я указываю dtype и преобразую 'Date[G]','Time[G]' в один столбец.

dtype_dict= {'#RIC': 'str', 'Price': 'float', 'Volume': 'float'} 
df=dd.read_csv(f, compression='gzip',header=0, sep=',',
           quotechar='"',usecols=['#RIC','Date[G]','Time[G]','Price','Volume'],
                                  blocksize=None,parse_dates=[['Date[G]','Time[G]']],dtype=dtype_dict)

После этого я удаляю все NA в столбцах 'Price','Volume' и устанавливаю объединенный столбец 'Date[G]_Time[G]' в качестве индекса без удаления столбца, поскольку он мне все еще нужен позже.

df= df.dropna(subset=['Price','Volume'])
df=df.set_index('Date[G]_Time[G]', drop=False)

Затем я попытался разбить это 'Date[G]_Time[G]' столбец снова, так как мой выходной файл требует даты и времени в двух отдельных столбцах.Я знаю, что должен быть лучший способ справиться с этим, я просто не могу его найти.

df['Date[G]'] = dd.to_datetime(df['Date[G]_Time[G]']).dt.date
df['Time[G]'] = dd.to_datetime(df['Date[G]_Time[G]']).dt.time
df=df.drop(['Date[G]_Time[G]'],axis=1)

После этого я добавляю этот фрейм данных в список.У меня есть куча файлов csv.gz, и я хочу открыть их все, а затем перераспределить этот большой фрейм данных с периодичностью календарного года.

dl=[]
df_concated=dl.append(df)
df_concated.repartition(freq='A')

Я знаю, что по умолчанию dask может быть очень медленнымЯ просто не знаю, как это установить, что меня очень расстраивает.Кто-нибудь знает, как оптимизировать мой код?

Пример данных.

 #RIC   Date[G]   Time[G]         Price Volume
 VZC.L 2014-05-01 06:16:00.480000 46.64 88.0
 VZC.L 2014-05-01 06:16:00.800000 46.64 33.0
 VZC.L 2014-05-01 06:16:00.890000 46.69 20.0
 VZC.L 2014-05-01 06:16:00.980000 46.69 40.0
 VZC.L 2014-05-01 06:16:01.330000 46.67 148.0
...