Я пытаюсь найти быстрый способ добавления нового столбца в кадре данных DASK, в котором добавляемые значения основаны на условиях. Мне был рекомендован подход с использованием numpy, но он сравнительно медленный.
В настоящее время я загружаю CSV-строку длиной 11 м, добавляя несколько новых столбцов, каждый из которых имеет формульные вычисления, и печатающую головку и хвост - менее чем за 10 секунд.
Код, который в настоящее время используется длямедленная / хлопотная функция ниже. Хотелось бы узнать, есть ли эквивалентный подход, родной для dask , или же можно улучшить структуру простого запроса для повышения производительности.
Это код, о котором идет речь Время выполнения этого составляет 60 секунд + - по умолчанию я получаю ошибки = 0, поэтому я не уверен, каково общее время выполнения. Я надеюсь, что время выполнения может быть уменьшено до нескольких секунд.
import dask.dataframe as dd
import dask.multiprocessing
import dask.threaded
import pandas as pd
import numpy as np #I'd like to not use this if possible
# Dataframes implement the Pandas API
import dask.dataframe as dd
ddf["AndHeathSolRadFact"] = np.select(
[
(ddf[ddf['Month'].between(8, 12)]),
(ddf[ddf['Month'].between(1, 2) & ddf['CloudCover']<30])
], #list of conditions
[1, 1], #list of results
default=0) #default if no match
И наоборот (в качестве примера) , время выполнения которого составляет 8 секунд . Преобразование даты, число Дата-время в месяц и приличная формула .:
import dask.dataframe as dd
import dask.multiprocessing
import dask.threaded
import pandas as pd
# Dataframes implement the Pandas API
import dask.dataframe as dd
from timeit import default_timer as timer
start = timer()
ddf = dd.read_csv(r'C:\Users\i5-Desktop\Downloads\Weathergrids.csv')
ddf['DateTime'] = dd.to_datetime(ddf['Date'], format='%Y-%d-%m %H:%M')
ddf['Month'] = ddf['DateTime'].dt.month
ddf['Grass_FMC'] = (97.7+4.06*ddf['RH'])/(ddf['Temperature']+6)-0.00854*ddf['RH']+3000/ddf['Curing']-30
print(ddf.head())
end = timer()
Я надеюсь значительно улучшить производительность первого данного блока кода, где я оцениваю, что такое месяц, а такжепроверка облачного покрова.