我有一个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数据帧的正确方法是什么?
答案 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')