измените конкретные значения в фрейме данных, если одна ячейка в строке равна нулю

#python #pandas #if-statement #null

#python #pandas #if-оператор #null

Вопрос:

У меня есть следующий фрейм данных в pandas:

 >>>name   food  beverage  age
0  Ruth   Burger Cola      23
1 Dina    Pasta  water     19
2 Joel    Tuna   water     28
3 Daniel  null   soda      30
4 Tomas   null   cola     10
  

Я хочу указать условие, что если значение в столбце «еда» равно нулю, возраст и напиток изменятся на ‘ ‘ (также пустой),

Для этого я написал этот код:

 if df[(df['food'].isna())]:
  df['beverage']=' '
  df['age']=' '
  

но я продолжаю получать ошибку:

Ошибка значения: значение истинности фрейма данных неоднозначно. Используйте.empty,.bool(),.item(),.any() или.all().

У меня возникли проблемы с расположением ([ но не помогло, что я делаю не так?

Ответ №1:

Вы можете использовать boolean indexing для присвоения значений на основе условия:

 df.loc[df['food'].isna(), ['age', 'beverage']] = ''
  

      name    food beverage age
0    Ruth  Burger     Cola  23
1    Dina   Pasta    water  19
2    Joel    Tuna    water  28
3  Daniel     NaN             
4   Tomas     NaN             
  

Ответ №2:

Попробуйте с mask

 df[['beverage','age']] = df[['beverage','age']].mask(df['food'].isna(),'')

df
Out[86]: 
     name    food beverage age
0    Ruth  Burger     Cola  23
1    Dina   Pasta    water  19
2    Joel    Tuna    water  28
3  Daniel     NaN             
4   Tomas     NaN             
  

Ответ №3:

Вы можете использовать np.where :

 cols = ['beverage','age']
arr = np.where(df['food'].isna()[:,None],'',df[cols])
#for NaN : arr = np.where(df['food'].isna()[:,None],np.nan,df[cols])
df[cols] = arr
  

      name    food beverage age
0    Ruth  Burger     Cola  23
1    Dina   Pasta    water  19
2    Joel    Tuna    water  28
3  Daniel     NaN             
4   Tomas     NaN