Dask 将 2 个数据帧连接成 1 个数据帧

客观的

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:并非所有分区都是已知的,无法对齐分区。请使用set_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


慕尼黑的夜晚无繁华
浏览 39回答 1
1回答

翻过高山走不出你

我认为当你做这样的事情时会出现错误:df = df.assign(label = df_labelled.label)因为数据帧 df 或/和 df_labelled 中没有索引。而且 Dask 不像 Pandas 那样支持多个索引。如果您有多个键来合并 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")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python