#python-3.x #pandas #dask #dask-dataframe
#python-3.x #pandas #dask #dask-фрейм данных
Вопрос:
Я ищу замену значений в строках, где при использовании dask выполняется несколько условий. Предварительно установленное значение, с помощью которого я буду выполнять замену, присутствует в одном столбце, и если условие выполнено, я заменю целевое значение на предварительно установленное значение.
Я бы хотел остаться в dask, а не выполнять это действие с другой библиотекой, если это возможно, из-за ограничений памяти при перемещении фреймов данных.
На данный момент я пытаюсь использовать команду .mask .
Где GrassDeadFMC >= 12 и скорость ветра <= 10, тогда сделайте GrassFMCoefficient равным значению в GFMG12L10 . ddf['GrassFMCoefficient'] = ddf['GFMG12L10'].mask(ddf['GrassDeadFMC'] >= 12 amp; 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 amp; ddf['WindSpeed'] <= 10)
print(ddf.head(10))
Любая помощь по этому вопросу будет оценена.
Ответ №1:
вы хотите получить такой результат??
вы должны изолировать каждое условие с Bracket '()'
помощью, например (condition1) amp; (condition2)
. , это также делает логическое сравнение с логическим.
ddf['GrassFMCoefficient'] = ddf['GFMG12L10'].mask((ddf['GrassDeadFMC'] >= 12) amp; (ddf['WindSpeed'] <= 10))
Комментарии:
1. Спасибо. Эта строка работает в приведенном мной примере, но не в моем полном сценарии. Мне нужно немного покопаться.
2. На самом деле — у меня была другая похожая проблема в следующей строке. Ваш ответ решил проблему. Спасибо!