Я использую Dask , чтобы загрузить CSV-строку длиной 11 м в кадр данных и выполнить вычисления. Я достиг положения, когда мне нужна условная логика - если это, то это, иначе другое.
Если бы я использовал, например, панд, я мог бы сделать следующее, где используется оператор numpy selectнаряду с массивом условий и результатов. Выполнение этого утверждения занимает около 35 секунд - неплохо, но не здорово:
df["AndHeathSolRadFact"] = np.select(
[
(df['Month'].between(8,12)),
(df['Month'].between(1,2) & df['CloudCover']>30) #Array of CONDITIONS
], #list of conditions
[1, 1], #Array of RESULTS (must match conditions)
default=0) #DEFAULT if no match
Я надеюсь использовать dask , чтобы сделать это изначально в dask dataframeбез необходимости сначала конвертировать мой dask кадр данных в кадр данных pandas, а затем снова обратно. Это позволяет мне: - использовать многопоточность - использовать фрейм данных, который больше доступного оперативной памяти - потенциально ускорить результат.
Пример CSV
Location,Date,Temperature,RH,WindDir,WindSpeed,DroughtFactor,Curing,CloudCover
1075,2019-20-09 04:00,6.8,99.3,143.9,5.6,10.0,93.0,1.0
1075,2019-20-09 05:00,6.4,100.0,93.6,7.2,10.0,93.0,1.0
1075,2019-20-09 06:00,6.7,99.3,130.3,6.9,10.0,93.0,1.0
1075,2019-20-09 07:00,8.6,95.4,68.5,6.3,10.0,93.0,1.0
1075,2019-20-09 08:00,12.2,76.0,86.4,6.1,10.0,93.0,1.0
Полный код для минимального жизнеспособного образца
import dask.dataframe as dd
import dask.multiprocessing
import dask.threaded
import pandas as pd
import numpy as np
# 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')
#Convert back to a Dask dataframe because we want that juicy parallelism
ddf2 = dd.from_pandas(df,npartitions=4)
del [df]
print(ddf2.head())
#print(ddf.tail())
end = timer()
print(end - start)
#Clean up remaining dataframes
del [[ddf2]