如何根据条件替换DataFrame / Series中的行值?

时间:2020-10-01 11:09:25

标签: python-3.x pandas

我正在为泰坦尼克号沉船数据集准备模型。我正在尝试填补男性和女性成员的失踪年龄分别为31岁和28岁。

我尝试使用此代码填充失踪的男性乘客

if data[data.Sex=='male'].Age.isna():
     
    data['Age'] = 31 

并出现以下错误,

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

1 个答案:

答案 0 :(得分:0)

if data[data.Sex=='male'].Age.isna():
 
    data['Age'] = 31

有多个错误:

  1. data[data.Sex=='male'].Age.isna() 返回一系列布尔值,例如:(True,False,False,True)您期望if statement做什么?如果是,请执行以下操作,如果满足以下条件:在这里,它不是真或假,而是一系列。

它不能处理导致错误的原因: ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

  1. 即使行得通,两条线也将彼此独立地处理。因为data[data.Sex=='male'].Age.isna()data['Age'] = 31没有联系 即使if语句为Truedata['Age'] = 31也会将所有年龄设置为31,不仅缺少年龄。我认为那不是您想要做的。

解决方案:

要实现您最可能想做的事情,可以使用:

data.loc[( (data.Sex=='male') & (data.Age.isna()) )] = 31

另外,为了使if语句返回True而不是错误,请使用:

any(data[data.Sex=='male'].Age.isna())all(data[data.Sex=='male'].Age.isna()),具体取决于您要达到的目标。