Pandas中isnull()搭配行apply lambda报错AttributeError的原因求解
报错原因解释
报错本质是调用对象类型不匹配,核心差异如下:
- 第一种写法中,
ad_clicks.ad_click_timestamp是 Pandas 的Series对象,Series本身内置了isnull()方法,可以直接对序列内所有元素批量判空,返回布尔类型的Series,取反操作可正常执行。 - 第二种行遍历的
apply写法中,row.ad_click_timestamp取到的是对应行对应列的单个单元格原生值:如果用户点击过,这个值是字符串/时间戳等普通Python对象,没有内置isnull()方法,调用就会抛出AttributeError。
修正方案
如果一定要用行apply实现相同逻辑,应该调用 Pandas 顶层的pd.isnull()/pd.isna()方法,该方法支持对单个原生值判空,写法如下:
import pandas as pd ad_clicks['is_click'] = ad_clicks.apply(lambda row : ~pd.isnull(row.ad_click_timestamp), axis = 1)
额外提示:直接对整列做向量化操作(即第一种写法)的性能远高于行级
apply,非特殊场景优先使用第一种写法。
内容的提问来源于stack exchange,提问作者RikkiS
相关产品推荐
相关产品推荐

