为何使用in运算符无法匹配Pandas Series中的字符串?
为啥
'Adam' in df['name']返回False? 嘿,这个问题我之前踩过坑!咱们来理清楚背后的原因,还有正确的解决办法~
问题根源
Pandas的Series(也就是你这里的df['name'])对in操作符的处理和普通列表不一样:
- 普通列表的
in是检查元素是否存在于列表中 - 但Pandas Series的
in是检查这个值是否是Series的索引标签
你的示例里,df['name']的索引是默认的0、1、2,根本没有'Adam'这个索引,所以'Adam' in df['name']自然返回False啦!
正确的检查方式
这里有几种靠谱的方法可以检查值是否在Series的元素里:
转成列表(你已经用到的方法)
把Series转成普通列表后,in就会按我们熟悉的逻辑工作:df = pd.DataFrame({'name': [ 'Adam', 'Ben', 'Chris' ]}) 'Adam' in list(df['name']) # 返回True用
Series.isin()方法
这是Pandas推荐的做法,更高效,尤其是处理大数据集的时候:df['name'].isin(['Adam']).any() # 返回True解释一下:
isin(['Adam'])会返回一个布尔Series,每个位置标记是否等于'Adam',再用.any()判断是否有至少一个True。直接访问Series的底层值
通过.values获取Series的numpy数组,再用in检查:'Adam' in df['name'].values # 返回True
内容的提问来源于stack exchange,提问作者ceiling cat
相关产品推荐
相关产品推荐

