Pandas使用drop按条件删除数据报unhashable type 'list'错误如何解决
报错原因
你的代码存在两个核心错误,直接触发了该报错:
- 语法逻辑错误:
[df['CNT_CHILDREN'] > 10].index这段代码里,你先将布尔筛选序列放进了普通Python列表中,再尝试调用index属性。Python列表本身没有index属性,同时你向drop方法传入了不可哈希的列表结构,直接触发unhashable type: 'list'报错。 - 赋值维度错误:你尝试将
drop操作返回的整个DataFrame赋值给df['CNT_CHILDREN']单列,即便删除逻辑修复,也会触发维度不匹配的报错。
修复方案
根据你的需求对应选择实现方式:
方案1:删除CNT_CHILDREN值大于10的整行数据
这是最常见的筛选需求,两种写法均可实现:
# 写法1:布尔索引直接保留符合条件的行(语法更简洁,性能更优) df = df[df['CNT_CHILDREN'] <= 10] # 写法2:使用drop方法删除符合条件的行 df = df.drop(df[df['CNT_CHILDREN'] > 10].index)
方案2:仅处理CNT_CHILDREN单列,清除大于10的无效值
如果不需要删除整行,仅要将该列大于10的值置为空,使用如下代码:
import pandas as pd df.loc[df['CNT_CHILDREN'] > 10, 'CNT_CHILDREN'] = pd.NA
内容的提问来源于stack exchange,提问作者Ruslan Pylypiuk
相关产品推荐
相关产品推荐

