我希望在使用 dask 时替换满足多个条件的行上的值。我将执行替换的预设值存在于一列中,如果满足条件,那么我将用预设值替换目标值。
如果可能,由于在移动数据帧时的内存限制,我想留在 dask 中而不是使用另一个库执行此操作。
目前,我正在尝试使用 .mask 命令。
如果 GrassDeadFMC >= 12 且 Windspeed <= 10,则使 GrassFMCoefficient 等于 GFMG12L10 中的值。
ddf['GrassFMCoefficient'] = ddf['GFMG12L10'].mask(ddf['GrassDeadFMC'] >= 12 & ddf['WindSpeed'] <= 10)
我收到的错误是:
ValueError: Metadata inference failed in `and_`.
Original error is below:
------------------------
TypeError('cannot compare a dtyped [float32] array with a scalar of type [bool]')
一个最小的可执行脚本,它给出了一个稍微不同的错误,但我猜可能会遇到同样的问题。
import dask.dataframe as dd
import pandas as pd
from random import randint
df = pd.DataFrame({'GrassFMCoefficient': [0 for x in range(10)],
'GFMG12L10': [randint(1, 50) for x in range(10)],
'GrassDeadFMC': [randint(1, 50) for x in range(10)],
'WindSpeed': [randint(1, 30) for x in range(10)]})
ddf = dd.from_pandas(df,npartitions=1)
ddf['GrassFMCoefficient'] = ddf['GFMG12L10'].mask(ddf['GrassDeadFMC'] >= 12 & ddf['WindSpeed'] <= 10)
print(ddf.head(10))
对此的任何帮助将不胜感激。