客观
要将具有部分标记点的df_labelled
文件合并到df
,其中包含所有点。
我尝试过的事情
参考Simple way to Dask concatenate (horizontal, axis=1, columns),我尝试了下面的代码
df = df.repartition(npartitions=200)
df = df.reset_index(drop=True)
df_labelled = df_labelled.repartition(npartitions=200)
df_labelled = df_labelled.reset_index(drop=True)
df = df.assign(label = df_labelled.label)
df.head()
但随后我收到错误消息
ValueError: Not all divisions are known, can't align partitions. Please use `set_index` to set the index.
我尝试过的另一件事是对表进行左连接,但是所有标签我都得到了NaN,你能解释我做错了什么吗?
result = dd.merge(df, df_labelled, on=['x', 'y', 'z','R', 'G', 'B'], how="left")
result.head()
x y z R G B label
0 39020.470000 33884.200003 36.445701 25 39 26 NaN
1 39132.740002 33896.049994 30.405700 19 24 18 NaN
2 39221.059994 33787.050001 26.605700 115 145 145 NaN
无论如何,我可以将以下预期结果存档吗?我不能在Pandas中跑步,因为有很多要点会在Pandas中引起内存问题。
数据
df(此文件包含所有要点)
x y z R G B
0 39047.700012 33861.890015 48.115704 7 18 12
1 39044.110016 33860.150024 47.135700 14 28 15
2 39049.280029 33861.950073 49.405701 30 58 33
3 39029.030000 33937.689993 48.425700 152 154 143
4 39066.980000 33937.870001 49.725699 209 218 225
5 39069.810002 33795.460001 42.405699 113 136 154
df_labelled(此文件包含一部分标记点)
x y z R G B label
0 39047.700012 33861.890015 48.115704 7 18 12 14
1 39044.110016 33860.150024 47.135700 14 28 15 14
2 39049.280029 33861.950073 49.405701 30 58 33 14
预期结果
x y z R G B label
0 39047.700012 33861.890015 48.115704 7 18 12 14
1 39044.110016 33860.150024 47.135700 14 28 15 14
2 39049.280029 33861.950073 49.405701 30 58 33 14
3 39029.030000 33937.689993 48.425700 152 154 143 nan
4 39066.980000 33937.870001 49.725699 209 218 225 nan
5 39069.810002 33795.460001 42.405699 113 136 154 nan
答案 0 :(得分:0)
我认为当您执行此类操作时会出错:
df = df.assign(label = df_labelled.label)
因为在数据框df或/和df_labelled中没有索引。而且Dask不支持像熊猫一样的多重索引。 如果您有多个键可以合并Dask中的数据框,请定义左键和右键,而不要使用索引。这个适合我:
result = dd.merge(df, df_labelled, left_on=['x', 'y', 'z','R', 'G', 'B'], right_on = ['x', 'y', 'z','R', 'G', 'B'], suffixes=['_1', '_2'], how="left")