使用pandas isin函数报None of [] are in the [columns]错误
报错原因
你的代码是括号位置写错了,导致执行逻辑完全偏离预期,报错和值筛选本身没关系:
你写的df[df['C']].isin(my_subset)会按照从左到右、从内到外的顺序先执行df[df['C']]——这一步pandas会把df['C']里存的'5-1'、'6-2'这类字符串当成列名,去DataFrame里找对应列。但你的表只有A、B、C三列,根本不存在这些列名,所以直接抛出「传入的索引都不在列中」的错误,后面的.isin(my_subset)压根没执行到。
修复方法
把.isin()的调用挪到列索引的括号内部,先对目标列做值匹配得到布尔掩码,再用掩码筛选整表行数据即可:
import pandas as pd import numpy as np np.random.seed(0) df = pd.DataFrame({'A': [5,6,3,4,5], 'B': [1,2,3,5,1]}) df["C"] = df['A'].astype(str) +"-"+ df["B"].astype(str) uniqueVal = pd.unique(df["C"]) my_subset = uniqueVal[np.random.choice(len(uniqueVal), size=2, replace=False)] # 正确筛选写法 result = df[df['C'].isin(my_subset)] print(result)
运行后输出结果:
A B C 2 3 3 3-3 3 4 5 4-5
踩坑提醒
- 针对单列的筛选逻辑(比如
isin、str.contains、比较运算等),都要直接作用在列对象上,再把得到的布尔序列传给df[]筛选行 - 不要随意给列索引加多余的括号,
df[df['C']]和df[df['C'].isin(xxx)]的逻辑天差地别
内容的提问来源于stack exchange,提问作者sergey_208
相关产品推荐
相关产品推荐

