Pandas中如何获取mask首个匹配索引,无匹配时返回None?
解决mask无匹配时返回None的问题
原代码在mask没有匹配值时会触发索引错误,因为空索引无法取[0]。这里给你两种简单的解决方式:
方法一:用next()直接取首个匹配索引(推荐)
直接利用迭代器的特性,当没有匹配项时返回None:
x = next(iter(df.loc[mask].index), None)
原理:df.loc[mask].index会返回所有匹配mask的索引,转成迭代器后用next()取第一个元素;如果没有匹配项,迭代器为空,就返回指定的默认值None。而且相比你原来的代码,不需要用cumsum(),逻辑更直接。
方法二:先判断是否存在匹配项
先检查mask里有没有True值,再决定返回结果:
if mask.any(): x = df.loc[mask].index[0] else: x = None
原理:mask.any()会判断mask中是否至少有一个True,有就取第一个匹配索引,没有就返回None。
验证效果
- 原DataFrame场景下,两种方法都会返回索引4;
- 当mask无匹配时(比如把df的a列全改成≤2的值),x会返回None,不会报错。
内容的提问来源于stack exchange,提问作者AmirX
相关产品推荐
相关产品推荐

