Pandas使用.loc按列内容创建子集的语法问题排查
问题分析与解决
为什么你的代码返回空子集?
你写的df["Country Code"] == ("IRL", "FRA", "IND")是在做逐行判断:当前行的Country Code值是否完全等于整个元组("IRL", "FRA", "IND")。但你的数据里Country Code都是单个字符串(比如"IRL"),没有任何一行的取值是这个三元组,所以这个判断会返回全False的布尔序列,.loc用这个序列索引自然就得到空子集了。
另外注意:你的数据集里列名是Country code(小写code),如果代码里写的"Country Code"(大写Code)和实际列名不一致,理论上会抛出KeyError,但你没报错,说明实际列名应该是Country Code,如果是笔误的话也要统一列名。
正确的筛选写法
要筛选多个指定取值的行,Pandas里最简洁的方式是用isin()方法:
subset = df.loc[df["Country Code"].isin(["IRL", "FRA", "IND"])]
isin()会逐行检查当前值是否在传入的列表(或元组、集合)中,符合条件的行会返回True,最终就能筛选出目标行。
如果想用逻辑或的方式拼接条件,也可以这么写(注意每个条件要加括号):
subset = df.loc[(df["Country Code"] == "IRL") | (df["Country Code"] == "FRA") | (df["Country Code"] == "IND")]
这种写法适合取值较少的情况,取值多的时候不如isin()简洁。
预期结果
执行正确代码后,会返回以下行:
| Country Code | Value |
|---|---|
| IRL | 10 |
| IRL | 12 |
| IRL | 11 |
| FRA | 15 |
| FRA | 16 |
| IND | 9 |
| IND | 11 |
内容的提问来源于stack exchange,提问作者Niamh
相关产品推荐
相关产品推荐

