Я попытался открыть файл 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