You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas中如何正确使用带特定条件的DataFrame.loc筛选行

报错原因分析

两种写法的错误本质都是没有正确生成逐行匹配的布尔掩码:

  • 第一种写法里的dgdp['Code'].str是pandas提供的字符串处理访问器,不是列的实际值序列,表达式dgdp['Code'].str in country_codes不会逐行判断,只会返回单个布尔值False,.loc接收到这个值时会尝试找名为False的列,最终触发KeyError: False。
  • 第二种写法用Python原生in关键字判断时,会尝试把整个dgdp['Code']Series对象作为元素去和集合里的值匹配,但是Series是可变对象,不支持哈希计算,因此触发TypeError: 'Series' objects are mutable, thus they cannot be hashed报错。
正确筛选写法

pandas提供了专门的.isin()方法实现逐元素的集合成员判断,该方法会返回和原列长度一致的布尔序列,正好适配.loc的行筛选逻辑:

# 计算两个DataFrame中Code列的交集
country_codes = set(dle['Code']) & set(dgdp['Code'])
# 用isin生成布尔掩码,筛选目标行
filtered_result = dgdp.loc[dgdp['Code'].isin(country_codes)]
补充说明
  • 实际使用时如果嫌提前算交集麻烦,也可以直接写dgdp[dgdp['Code'].isin(dle['Code'])],不用手动转set,pandas内部会自动处理,数据量特别大的时候提前转set判断速度会快一点。
  • 如果Code列存在空值,.isin()对空值会返回False,不会被筛进来,有需要保留空值的话额外追加| dgdp['Code'].isna()的判断条件即可。

内容的提问来源于stack exchange,提问作者Jhanzaib Humayun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.17 16:16:01