我有2个不同的自定义函数定义。第一个函数接受一个参数,第二个函数接受两个参数。但是他们调用函数的方式不同,为什么我不能像调用第一个函数那样调用第二个函数呢?下面是我的两个函数,以及我如何调用它们。
Function with single argument:-
def convert_sqft_to_num(x):
tokens = x.split('-')
if len(tokens) == 2:
return (float(tokens[0])+float(tokens[1]))/2
try:
return float(x)
except:
return None
df1.total_sqft = df1.total_sqft.apply(convert_sqft_to_num)
Second function with multiple arguments:-
def corr_sft_outlier(in_bhk, in_sft):
bhk_band = np.quantile(outlierdf2[outlierdf2.bhk_size==in_bhk]['avg_sft'], (.20,.90))
lower_band = round(bhk_band[0])
upper_band = round(bhk_band[1])
if (in_sft>=lower_band)&(in_sft<=upper_band):
return in_sft
elif (in_sft<lower_band):
return lower_band
elif (in_sft>upper_band):
return upper_band
else:
return None下面是第二个函数调用
outlierdf2['adj_avg_sft'] = outlierdf2.apply(lambda x: corr_sft_outlier(x['bhk_size'],x['avg_sft']), axis=1)我想调用上面的函数,如下所示
outlierdf2['adj_avg_sft'] = outlierdf2[['bhk_size','avg_sft']].apply(corr_sft_outlier)发布于 2020-10-16 00:39:11
在此部分中,不能调用具有2个参数和1个参数的函数:
outlierdf2[['bhk_size','avg_sft']].apply(corr_sft_outlier)您传递的是“具有2列的df行”,而不是2个值。因此,无论是创建一个包含两列的框架(即outlierdf2["bhk_size","avg_sft"].apply)还是使用df本身调用它(即outlierdf2.apply),都必须传递适当数量的参数。所以你可以像这样改变你的函数,然后以你想要的方式调用它:
def corr_sft_outlier(row):
in_bhk, in_sft = row['bhk_size'],row['avg_sft']
bhk_band = np.quantile(outlierdf2[outlierdf2.bhk_size==in_bhk]['avg_sft'], (.20,.90))
lower_band = round(bhk_band[0])
upper_band = round(bhk_band[1])
if (in_sft>=lower_band)&(in_sft<=upper_band):
return in_sft
elif (in_sft<lower_band):
return lower_band
elif (in_sft>upper_band):
return upper_band
else:
return None
outlierdf2['adj_avg_sft'] = outlierdf2[['bhk_size','avg_sft']].apply(corr_sft_outlier,axis=1)https://stackoverflow.com/questions/64372149
复制相似问题