Pandas基于两列过滤行问题:代码返回空DataFrame求解
问题原因及解决办法
你的代码返回空DataFrame,主要是两个可能的原因:
1. 逻辑判断与实际需求不匹配(或数据无符合原逻辑的行)
你需要的是「巴基斯坦+拉合尔」或者「叙利亚+罗马」的行,但编写的代码逻辑是:(国家为巴基斯坦/叙利亚)并且(城市为拉合尔/罗马)。这个逻辑会覆盖四种组合:巴基斯坦+拉合尔、巴基斯坦+罗马、叙利亚+拉合尔、叙利亚+罗马。如果你的数据里只有巴基斯坦+拉合尔,理论上这个逻辑应该能筛到,但如果没筛到,更可能是第二个原因。
2. 数据字符串存在大小写/空格/拼写问题
比如:
- country列实际值是
pakistan全小写,而非Pakistan - city列是
lahore小写,或者Lahore末尾带空格 - 存在拼写错误,比如
Pakistan写成Pakistann
这种精确匹配的条件会直接返回False,自然无法筛选到任何行。
先排查数据问题
运行以下代码,查看country和city列的实际唯一值,确认是否有格式或拼写问题:
print("国家列表:", temperatures["country"].unique()) print("城市列表:", temperatures["city"].unique())
修正逻辑(如果是逻辑写错)
如果你的需求确实是「巴基斯坦+拉合尔」或「叙利亚+罗马」,应将逻辑调整为:
temperatures[((temperatures["country"] == "Pakistan") & (temperatures["city"] == "Lahore")) | ((temperatures["country"] == "Syria") & (temperatures["city"] == "Rome"))]
处理字符串匹配问题(如果是格式问题)
可以去除空格并统一大小写后再匹配:
temperatures[((temperatures["country"].str.strip().str.lower() == "pakistan") & (temperatures["city"].str.strip().str.lower() == "lahore")) | ((temperatures["country"].str.strip().str.lower() == "syria") & (temperatures["city"].str.strip().str.lower() == "rome"))]
内容的提问来源于stack exchange,提问作者mapleleaf
相关产品推荐
相关产品推荐

