def include_mean():
if pd.isnull('Age'):
if 'Pclass'==1:
return 38
elif 'Pclass'==2:
return 30
elif 'Pclass'==3:
return 25
else: return 'Age'
train['Age']=train[['Age','Pclass']].apply(include_mean(),axis=1)
为什么上面的代码给我一个类型错误。你知道吗
TypeError: ("'NoneType' object is not callable", 'occurred at index 0')
我现在知道正确的代码
def impute_age(cols):
Age = cols[0]
Pclass = cols[1]
if pd.isnull(Age):
if Pclass == 1:
return 37
elif Pclass == 2:
return 29
else:
return 24
else:
return Age
train['Age'] = train[['Age','Pclass']].apply(impute_age,axis=1)
现在我想知道为什么需要改变,即改变背后的确切原因。科尔斯在这里干什么。你知道吗
Do not use ^{} 。相反,应该使用
.loc
设置子集上的值。这是顶格的简单映射。你知道吗对于最下面的情况,因为
else
子句,我们可以使用np.select
。其工作方式是创建一个条件列表,该列表遵循if,elif-else逻辑的顺序。然后我们提供一个选择列表,当我们遇到第一个True
时从中进行选择。既然有嵌套逻辑,我们需要首先取消它的注释,以便它在逻辑上读作样本数据
欢迎使用Python。为了回答你的问题,特别是在开始阶段,有时你只需要打开一个新的IPython笔记本,尝试一下:
在您的问题中,
cols
是您循环的每一行的值。你知道吗https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html
在panda数据帧上使用
apply
方法时,将对每一列(或每一行,取决于axis
参数,该参数默认为0
,即列轴)调用要应用的函数。 因此,函数必须为apply
将传递给它的行设置一个参数。你知道吗这有几个问题。你知道吗
'Pclass'==1:
保证是False
,因为您比较的是一个字符串('Pclass'
)和一个整数(1
),它们不能相等。您需要比较一列的Pclass
项的值,您可以通过索引列来检索:col["Pclass"]
,或者col[1]
,如果Pclass
是第二列。你知道吗pd.isnull('Age')
是False
,则函数返回None
。因为字符串'Age'
不是空的,所以应该总是这样。执行d.apply(include_mean())
时,调用include_mean
,返回None
,然后将该值传递给apply
。但是apply
需要一个可调用的函数(例如函数)。你知道吗else
子句中,返回字符串'Age'
。这意味着您的数据帧在某些单元格中具有值'Age'
。你知道吗您的第二个示例解决了这些问题:impute年龄函数现在为行(
cols
)获取一个参数,Age
和Pclass
列的值被查找和比较,并且您传递该函数而不调用它到apply
方法。你知道吗相关问题 更多 >
编程相关推荐