I have a df like so: RangeIndex: 115506 entries, 0 to 115505 Series name: Email Non-Null Count Dtype -------------- ----- 115506 non-null object dtypes: object(1) memory usage: 902.5+ KB I am searching some string values in the df 'abc' in df.Email returns False whereas df.Email.str.contains('abc') returns True I checked with LLMs and they return that: 1. 'abc' in df.Email This checks whether the exact string 'abc' is a label in the index of the Series df.Email. It does not check the contents of the Series. That's why it returns False, even if 'abc' appears somewhere in the data. 2. df.Email.str.contains('abc') This checks each element of the Series to see if 'abc' is a substring of that element. It returns a Series of booleans, and if 'abc' exists in at least one of the values, some elements will be True. Even in simple df import pandas as pd df = pd.DataFrame({'Email': ['abc', 'def']}) 'abc' in df.Email # False It's been a while since I used pandas, but I could swear thats how I used to check for values in columns Continue reading...