如何检查pandas Series中是否包含dict类型的元素
检查pandas Series中是否存在dict类型单元格
你预想的if dict in series写法无法实现需求,pandas中in操作默认检查对象是否存在于Series的索引中,而非判断元素类型,正确实现方法如下:
推荐实现(短路求值,性能最优)
遍历Series元素,用isinstance判断类型,配合any()做短路判断,遇到第一个dict类型元素就会终止遍历,不需要扫描全量数据:
import pandas as pd import numpy as np s = pd.Series([{'a':'1'}, np.nan, {'b':'2'}, np.nan], name="s") # 核心判断逻辑 has_dict = any(isinstance(item, dict) for item in s) if has_dict: print('True') else: print('False')
上述示例运行后会输出True,符合预期。
可选实现(apply写法)
如果习惯用pandas原生方法,也可以用apply遍历判断后调用any(),逻辑等价,只是小数据量下性能略低于生成器写法:
has_dict = s.apply(lambda x: isinstance(x, dict)).any()
注意事项
- 不要直接用
type(item) == dict判断类型,这种写法无法识别dict子类的实例,isinstance是类型判断的标准写法 - 不要尝试用
dict in s.values判断,dict是可变对象,等值判断逻辑不稳定,很容易返回错误结果
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

