У меня есть много фреймов данных dask, каждый из которых содержит точки с координатами (скажем, «X», «Y» и «Z») и значениями цвета (скажем, «R», «G» и «B»). ). Эти разные временные рамки данных могут включать в себя точки, которые также включены в другие временные рамки. Основываясь на значениях X, Y, Z, я хочу определить цвет, поэтому у меня есть функция, которая получает набор цветов в качестве входных данных и возвращает один цвет. Я также добавил все существующие фреймы данных в один (ddf
) и надеялся с легкостью использовать возможности dask.
Так что в основном это мой код:
def determine_color(data):
'''
Takes a dataframe with X,Y,Z,R,G,B and arbitrary number of rows and
returns coordinates and color. X,Y,Z of input are all the same
INPUT: data - dask dataframe
OUTPUT: pandas dataframe
'''
colors = np.array(data[['R','G','B']]) # <- ERROR occurs
...
point = pd.DataFrame({'X' : data.loc[0, 'X'], 'Y': data.loc[0, 'Y'], 'Z' : data.loc[0, 'Z'],
'R': finalcolor[0], 'G': finalcolor[1], 'B': finalcolor[2]})
return point
...
# Take all points with same X,Y,Z coordinates and determine their color
meta = {'X' : float, 'Y': float, 'Z' : float, 'R':int, 'G':int, 'B':int}
ddf = ddf.set_index('X').groupby(['X','Y','Z']).apply(determine_color, meta=meta).reset_index()
# Convert dask dataframe to pandas dataframe
ddf = ddf.compute()
Если я запусту этот Я получаю сообщение об ошибке в отмеченной точке. Почему-то я не понимаю, какой именно параметр присваивается determine_color
, я догадался, что это фрейм данных dask, но я не могу получить из него массив numpy. Это должно быть как-то возможно в отношении размера, потому что я точно знаю, что в группе не более 350 членов, которые обязательно должны помещаться в память ...
В сообщении об ошибке говорится, что "None of [Index(['R', 'G', 'B'], dtype='object', name='X')] are in the [index]"
. Означает ли это, что я должен сначала позвонить как-то вроде .set_index('R')
? Я попробовал это, но получил ошибку "None of [Index(['R', 'G', 'B'], dtype='object', name='R')] are in the [index]"
сейчас.
Мой последний вопрос: правильно ли я понял метаданные? Верно ли, что в конце ddf
содержит каждую комбинацию координат только один раз и соответствующие значения RGB, если я реализую ее, как показано выше?