Pandas处理Set类型列时apply+pop报错问题咨询
报错原因解析
核心问题出在两个方法对集合的操作性质上:
pop()是原地修改集合的方法,执行后会直接移除原集合中的元素,把集合变成空的。next(iter(x))只是读取集合内的元素,不会对原集合做任何修改。
过滤后仍报错的具体原因:
pandas执行df[df['key_set'].apply(lambda x: len(x) == 1)]时,返回的可能是原DataFrame的视图而非独立副本。当你调用pop()取出元素时,原DataFrame里对应的key_set集合已经被清空了。如果pandas内部对这个Series做了重复遍历(比如延迟计算、缓存复用等场景),后续再执行pop()时,面对的就是已经被清空的集合,自然抛出pop from an empty set错误。而
next(iter(x))因为不修改原集合,不管pandas内部怎么处理,集合始终保持长度为1的状态,所以能正常运行。
内容的提问来源于stack exchange,提问作者gourab ghosh
相关产品推荐
相关产品推荐

