首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向dask.dataframe添加dask.array列

向dask.dataframe添加dask.array列
EN

Stack Overflow用户
提问于 2018-01-09 05:24:55
回答 2查看 2.8K关注 0票数 8

我有一个dask数据帧和一个dask数组,它们以相同的逻辑顺序具有相同的行数。数据帧行通过字符串进行索引。我正在尝试将一个数组列添加到数据帧中。我尝试了几种方法,但都以其特定的方式失败了。

代码语言:javascript
复制
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.

还有其他一些变种。

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

EN

回答 2

Stack Overflow用户

发布于 2021-04-16 05:07:28

这似乎在dask版本的2021.4.0或更早的版本中确实有效。只需确保数据帧分区的数量与数组块的数量匹配即可。

代码语言:javascript
复制
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())

输出:

代码语言:javascript
复制
     z    a
0  100  200
1  101  201
2  102  202
3  103  203
票数 1
EN

Stack Overflow用户

发布于 2020-07-27 15:55:40

解决方案是取出原始Dask数据帧的索引列作为普通的pandas数据帧,添加Dask数组列,然后按索引列将其合并回Dask数据帧

代码语言:javascript
复制
index_col = df['index'].compute()
index_col['new_col'] = da.col.compute()
df = df.merge(index_col, 'left', on='index')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48158272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档