我试图将一个函数应用于“年龄”和“面积”列,以便获得在“所需”列中显示的结果。
不幸的是,此功能给我带来了错误。我知道Pandas中还有其他方法,例如iloc,但是我想了解这种特殊情况。
raw_data = {'age': [-1, np.nan, 10, 300, 20],'area': ['N','S','W',np.nan,np.nan],
'wanted': ['A',np.nan,'A',np.nan,np.nan]}
df = pd.DataFrame(raw_data, columns = ['age','area','wanted'])
df
def my_funct(df) :
if df["age"].isnull() :
return np.nan
elif df["area"].notnull():
return 'A'
else:
return np.nan
df["target"] = df.apply(lambda df:my_funct(df) ,axis = 1)
答案 0 :(得分:2)
在您的示例中,问题是当您通过引用df ['age']向函数传递一行时,它为您提供了一个浮点数,该浮点数没有名为isull()的方法。要检查float是否为空,可以使用pd.isna函数。对于notna()类似的情况。
def my_funct(df) :
if pd.isna(df["age"]) :
return np.nan
elif pd.notna(df["area"]):
return 'A'
else:
return np.nan
df["target"] = df.apply(lambda x: my_funct(x) ,axis = 1)