Pandas:多列中任意一列存在空值时设置指定列单元格值
解决多列空值判断下的列赋值问题
嘿,我完全懂你碰到的这个坑——当你想用多列的空值情况来筛选行时,直接把多列的isna()结果丢给loc确实会失效,因为这时候得到的是一个和原DataFrame同结构的布尔DataFrame,而loc的行筛选需要的是一维的布尔序列。
针对你的需求,用pandas原生的any(axis=1)就能完美解决,完全不需要numpy或者逐行遍历,而且对大型DataFrame效率也很高:
# 当page_title/brand/name任意一列有空值时,将other_col设为'True' df.loc[df[['page_title', 'brand', 'name']].isna().any(axis=1), 'other_col'] = 'True'
简单解释下原理:
df[['page_title', 'brand', 'name']].isna():生成一个布尔DataFrame,每个位置标记对应单元格是否为空值.any(axis=1):沿着行的方向做判断,只要该行的任意一列是空值(即布尔值为True),就返回True,最终得到一个和原DataFrame行数一致的一维布尔序列- 把这个序列传给
loc的行索引,就能精准定位到所有符合条件的行,再给other_col赋值即可
你之前单列的写法能生效,是因为df['page_title'].isna()本身就是一维的布尔序列,刚好符合loc的行筛选要求;而多列的isna()返回的是二维结构,所以直接用会出错。
内容的提问来源于stack exchange,提问作者splotsh
相关产品推荐
相关产品推荐

