我有很多简单的数据框,每个数据框都包含具有坐标(比如说“ 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
提供的参数是什么,我猜想它是一个模糊的数据帧,但是我无法从中获取一个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值(如果我像上图所示那样实现)是否正确?