#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