本文详解 pandas 中 `isin()` 与等值、类型匹配等组合条件的正确用法,重点解决因数据类型不一致(如年份误用字符串 `'2025'` 匹配整数 `2025`)导致筛选结果为空的常见问题。
在使用 Pandas 进行数据筛选时,isin() 是高效判断列值是否属于指定集合的常用方法。但当它与其它条件(如年份等于 2025)组合使用时,数据类型不匹配是最隐蔽也最常导致“返回空 DataFrame”的原因。
例如,以下代码看似合理,却可能返回零条记录:
df.loc[(df['Item Code'].isin(['04901', '04940'])) & (df['Year'] == '2025')]
问题根源在于:若 df['Year'] 列的实际数据类型为 int64(即数值型年份),而你用字符串 '2025' 去比较,Pandas 会执行严格类型匹配——2025 == '2025' 恒为 False,整个布尔索引全为 False,最终返回空结果。
✅ 正确做法是确保比较值的数据类型与列一致:
若 Year 列为整数(推荐且常见):
df[(df['Item Code'].isin(['04901', '04940'])) & (df['Year'] == 2025)]
更简洁、可读性更强的写法(推荐使用 .eq() 避免括号歧义):
df[df['Item Code'].isin(['04901', '04940']) & df['Year'].eq(2025)]
⚠️ 注意事项:
总结:Pandas 筛选失效,80% 源于类型不匹配。养成 print(df['Year'].dtype) 和 print(df['Year'].head()) 的调试习惯,能快速定位并修复此类问题。