使用pandas的isin()筛选DataFrame对象列返回空集该如何解决
问题原因与解决方法
筛选返回空结果,最常见的是目标列存在不可见空白字符、大小写不一致,或者数据类型不是字符串三类问题,按以下步骤排查即可:
步骤1:排查字符串首尾空白
从Excel读取的字符串经常会附带额外的空格、制表符等不可见字符,导致和你写的"HOUSTON"、"CONROE"匹配不上,先对列做去空白处理再筛选:
# 先去除首尾所有空白字符(包括空格、换行、制表符等) df1["CITY_AD"] = df1["CITY_AD"].str.strip() # 再执行筛选 result = df1[df1["CITY_AD"].isin(["HOUSTON","CONROE"])]
如果这一步已经能拿到结果,就不需要往下排查了。
步骤2:排查大小写不一致问题
如果去空白后还是没有结果,可能存在大小写混用的情况,统一转成大写再匹配:
df1["CITY_AD"] = df1["CITY_AD"].str.strip().str.upper() result = df1[df1["CITY_AD"].isin(["HOUSTON","CONROE"])]
步骤3:排查数据类型问题
如果前两步都没用,先检查列的数据类型,确认是不是字符串类型:
print(df1["CITY_AD"].dtype)
如果输出不是object或者string类型,先转成字符串再处理:
df1["CITY_AD"] = df1["CITY_AD"].astype(str).str.strip().str.upper() result = df1[df1["CITY_AD"].isin(["HOUSTON","CONROE"])]
辅助排查技巧
如果还是有问题,可以先打印出列里的唯一值,看实际存储的内容和你预期的有什么差异:
print(df1["CITY_AD"].unique())
你就能直接看到HOUSTON对应的值实际存储的是什么格式,针对性调整匹配的字符串即可。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

