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
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
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With