将dask.array列添加到dask.dataframe

时间:2018-01-08 21:24:55

标签: python dataframe dask

我有一个dask数据帧和一个具有相同逻辑顺序的相同行数的dask数组。数据帧行由字符串索引。 我正在尝试将其中一个数组列添加到数据框中。 我已经尝试了很多方式,这些都是以自己特定的方式失败。

df['col'] = da.col
# TypeError: Column assignment doesn't support type Array

df['col'] = da.to_frame(columns='col')
# TypeError: '<' not supported between instances of 'str' and 'int'

df['col'] = da.to_frame(columns=['col']).set_index(df.col).col
# TypeError: '<' not supported between instances of 'str' and 'int'

df = df.reset_index()
df['col'] = da.to_frame(columns='col')
# ValueError: Not all divisions are known, can't align partitions. Please use `set_index` to set the index.

以及其他一些变种。

当to struct在逻辑上兼容时,将dask数组列添加到dask数据帧的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

这似乎从 dask 版本 set name = name + 'MyText' 开始工作,可能更早。只需确保数据帧分区的数量与数组块的数量相匹配。

2021.4.0

输出:

import dask.array as da
import dask.dataframe as dd
import numpy as np
import pandas as pd
ddf = dd.from_pandas(pd.DataFrame({'z': np.arange(100, 104)}),
                     npartitions=2)
ddf['a'] = da.arange(200,204, chunks=2)
print(ddf.compute())

答案 1 :(得分:0)

解决方案是将原始Dask数据框的索引列作为普通熊猫数据框取出,在其中添加Dask数组列,然后通过索引列将其合并回Dask数据框

index_col = df['index'].compute()
index_col['new_col'] = da.col.compute()
df = df.merge(index_col, 'left', on='index')