【问题标题】:change specific values in dataframe if one cell in a row is null如果一行中的一个单元格为空,则更改数据框中的特定值
【发布时间】:2020-12-31 11:31:51
【问题描述】:
我在 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']=' '
但我不断收到错误:
ValueError:DataFrame 的真值不明确。使用a.empty,
a.bool()、a.item()、a.any() 或 a.all()。
我玩过 ([ 但没有帮助,我做错了什么?
【问题讨论】:
标签:
python
pandas
if-statement
null
【解决方案1】:
试试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
【解决方案2】:
您可以使用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
【解决方案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