使用Pandas筛选DataFrame列值在指定列表中的行时得到空表求助
解决Pandas中
isin()返回空DataFrame的问题 嘿,刚接触Python和Pandas碰到这种问题太正常了,我来帮你排查下!
你的筛选逻辑本身是完全正确的,但返回空DataFrame几乎可以肯定是数据类型不匹配导致的——比如你的Col4列里的数值其实是字符串类型(比如存储为'1'、'3'),而你用来筛选的列表List = [1,3,5]里是整数类型,两者类型不统一,isin()自然匹配不到任何结果。
第一步:验证数据类型
先检查下Col4的数据类型,确认问题:
print(df['Col4'].dtype)
如果输出是object,说明这一列是字符串类型;如果是int64才是整数类型。你也可以直接查看列内容:
print(df['Col4'])
要是看到输出里的元素带引号(比如'1'),那就实锤是类型问题了。
两种解决方案
方案1:把筛选列表转换成字符串类型
如果不想修改原DataFrame的列类型,可以把列表里的元素改成字符串:
List = ['1', '3', '5'] new_df = df[df['Col4'].isin(List)]
方案2:把Col4转换成整数类型
如果Col4里的内容都是可以转成整数的(没有字母或其他非数字内容),可以直接转换列类型后再筛选:
df['Col4'] = df['Col4'].astype(int) new_df = df[df['Col4'].isin([1,3,5])]
小提醒:如果
Col4里有无法转成整数的内容,第二种方法会抛出错误,这时候优先选方案1更稳妥。
按照上面的方法调整后,你应该就能得到想要的筛选结果啦!
内容的提问来源于stack exchange,提问作者Maki
相关产品推荐
相关产品推荐

