我正在尝试添加一个列到数据帧- ad_clicks。
ad_clicks已经有一个列- ad_click_timestamp时间值,如果客户点击了网站。如果他/她没有,则单元格中的值为nan。
如果我这样做-
ad_clicks['is_click'] = ~ad_clicks.ad_click_timestamp.isnull()
。
如果我这样做-
ad_clicks['is_click'] = ad_clicks.apply(lambda row : ~row.ad_click_timestamp.isnull(), axis = 1)
它抛出一个错误,如下所示-
AttributeError: ("'str' object has no attribute 'isnull'", u'occurred at index 0')
根据我的理解—在没有指定列的情况下使用apply, lambda函数的输入成为行,通过指定要操作的列—它为每行选择特定的列并执行操作。
那么,为什么相同的表达式在没有lambda -的情况下应用于列,而在应用于单元格时却不能使用lambda呢?
我在这里错过了什么?提前感谢任何解释(或语法更正,我可能遗漏)。
你的代码不起作用,因为在apply
调用中,row.ad_click_timestamp
会给出一个单独的项目,就像np.nan
一样。所以你必须尝试:
ad_clicks['is_click'] = ad_clicks.apply(lambda row : ~np.isnan(row.ad_click_timestamp), axis = 1)
或:
ad_clicks['is_click'] = ad_clicks.apply(lambda row : ~(row.ad_click_timestamp != row.ad_click_timestamp), axis = 1)