删除存储DataFrame列表的字典中非完整周元素时出现ValueError如何解决
问题原因
你遇到的报错来自两个叠加的问题:
- Python列表的
remove()方法执行时,会逐个比对列表元素和目标元素是否相等,当元素是pandas DataFrame类型时,pandas默认会对两个DataFrame做逐元素、逐标签的等值校验,只有标签完全一致的DataFrame才能比较,因此触发了ValueError: Can only compare identically-labeled DataFrame objects报错。 - 遍历列表的同时直接删除列表元素,会导致后续元素的索引自动前移,出现漏检部分元素的逻辑问题,本身也不推荐这种写法。
解决方案
最简洁且无风险的写法是用列表推导式直接过滤符合要求的DataFrame,不需要遍历删除:
for k in weekList.keys(): # 直接保留长度大于3的完整周数据 weekList[k] = [df for df in weekList[k] if len(df) > 3]
如果确实需要通过索引操作删除元素,可以倒序遍历列表索引,避免索引错位,同时不需要匹配DataFrame相等:
for k in weekList.keys(): # 倒序遍历索引,从后往前删不会影响未遍历的元素索引 for i in range(len(weekList[k])-1, -1, -1): if len(weekList[k][i]) <= 3: del weekList[k][i]
内容的提问来源于stack exchange,提问作者Bigboss01
相关产品推荐
相关产品推荐

