Pandas按关键词过滤CSV列触发索引不匹配报错解决
报错根因
触发索引不匹配报错和你输入的西里尔字母列名ЄДРПОУ(Гр.8)没有关系,核心问题是你在筛选条件里写了df[column].dropna():这个操作会直接丢弃目标列里为空的行,返回的布尔判断序列长度比原DataFrame短,索引无法和原表对齐,才会抛出Unalignable boolean Series provided as indexer错误,之前弹出的布尔序列重索引警告就是这个问题的前兆。
正确实现代码
以下代码同时满足两个需求:索引完全对齐不会报错、匹配前将目标列所有值统一转为小写实现大小写不敏感匹配:
# 目标列值统一转小写后匹配关键词,空值位置直接判定为不匹配,不改变序列长度 df2 = df[df[column].str.lower().str.contains(word.lower(), na=False)]
逻辑说明
- 去掉链式调用的
dropna(),改用str.contains()方法自带的na=False参数处理空值:空值位置直接返回False(即不满足匹配条件、不进入筛选结果),整个布尔判断序列的长度、索引和原DataFrame完全一致,不会触发对齐错误 - 在匹配逻辑前增加
.str.lower()调用,先把目标列的所有字符串值统一转为小写,再和已经转小写的输入关键词做匹配,实现大小写不敏感的过滤效果 - 如果后续需要保留目标列为空的行,只需要把参数里的
na=False改成na=True即可
内容的提问来源于stack exchange,提问作者Pythoner
相关产品推荐
相关产品推荐

