【发布时间】:2021-05-25 02:48:43
【问题描述】:
在下面的 Dask 代码中,我试图根据函数apply_masks 中的逻辑设置数据帧字段的值:
import numpy as np
import pandas as pd
import dask.dataframe as daskDataFrame
def apply_masks(df):
if df['Age'] > 14:
df['outcol'] = 6
else:
df['outcol'] = 5
return df
data = [[1,100, 12, 6], [1,200, 18, 5], [1,170, 22, 4]]
df = pd.DataFrame(data, columns = ['outcol', 'Weight', 'Age', 'Height'])
ddf = daskDataFrame.from_pandas(df, npartitions=100)
ddf = ddf.map_partitions(apply_masks)
print(ddf.compute())
问题是得到一个异常:
ValueError:
apply_masks中的元数据推断失败。您提供了一个自定义函数,但 Dask 无法确定 该函数返回的输出类型。
要解决此问题,请提供 meta= 关键字。的文档字符串 您运行的 Dask 函数应该有更多信息。
原始错误如下: ------------------------ ValueError('一个Series的真值不明确。使用a.empty, a.bool(), a.item ()、a.any() 或 a.all().')
如何解决这个问题?
【问题讨论】:
-
df['Age'] > 14给出了一系列布尔值,例如[True, False, True, True]等...您是否尝试将所有Age > 14的输出设置为6并为所有其他年龄设置5? -
是的,就是这样
标签: python pandas dask dask-distributed