Pandas中判断字符串是否存在于列中两种方式结果不一致的疑问
Pandas中判断字符串是否存在于列中两种方式结果不一致的疑问
我太懂这种时隔好久重拾Pandas,结果遇到操作和记忆里不一样的懵圈感了!你遇到的这个问题其实是Pandas里一个很容易踩的小坑,咱们把它掰扯清楚:
你手上有一个包含Email列的DataFrame,数据量有11万多条记录,当你用'abc' in df.Email判断字符串是否存在时返回了False,但用df.Email.str.contains('abc')却得到了True,这两种写法的本质完全不一样:
关于
'abc' in df.Email:
这个写法完全不是检查列里的单元格内容!它实际是在判断'abc'是不是这个Series(也就是Email列)的索引标签,和单元格里的内容半毛钱关系都没有。哪怕你的列里全是'abc',只要索引里没有叫'abc'的标签,它就会返回False。关于
df.Email.str.contains('abc'):
这才是你真正需要的判断方式!它会遍历Email列的每一个单元格,检查'abc'是不是该单元格字符串的子串,最后返回一个由布尔值组成的Series,只要有一个单元格里包含'abc',结果里就会出现True。
咱们用一个极简的例子验证下就更清楚了:
import pandas as pd df = pd.DataFrame({'Email': ['abc', 'def']}) 'abc' in df.Email # 结果是False,因为索引是0、1,没有'abc'这个标签 df.Email.str.contains('abc') # 结果是0 True\n1 False,准确找到包含'abc'的行
确实,隔段时间不用Pandas很容易把Python原生的in操作和Pandas的Series操作搞混,以前的记忆没出错,只是咱们记错了对应的写法而已~
内容来源于stack exchange
相关产品推荐
相关产品推荐

