15

Can anyone see why this isn't working?

Its trying to do; if Column Name Contains the text 'Andy', then make a column called Andy and set that row = to 1

df.loc[df['Name'].str.contains(['Andy']),'Andy']=1
1

2 Answers 2

12

You have to remove list, need only string:

df.loc[df['Name'].str.contains('Andy'),'Andy'] = 1

For multiple values chain by |:

df.loc[df['Name'].str.contains('Andy|Andrew'),'Andy'] = 1
Sign up to request clarification or add additional context in comments.

Comments

6

pd.Series.str.contains requires for its pat argument a "Character sequence or regular expression", not a list.

Just use Boolean assignment and convert to int. This will set unmatched rows to 0. For example:

# Name includes 'Andy'
df['Andy'] = df['Name'].str.contains('Andy').astype(int)

# Name includes 'Andy' or 'Andrew'
df['Andy'] = df['Name'].str.contains('Andy|Andrew').astype(int)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.