Search for string in a dataframe first 3 word

Question:

In this data frame, I have the start word "PRE" in the columns containing the note, so I should update yes to the new columns, otherwise no.

For whom I got this code but it is not working.

import pandas as pd
    
df1 = pd.DataFrame({'NOTES': ["PREPAID_HOME_SCREEN_MAMO", "SCREEN_MAMO",
                              "> Unable to connect internet>4G Compatible>Set",
                              "No>Not Barred>Active>No>Available>Others>",
                              "Internet Not Working>>>Unable To Connect To"]})
df1['NOTES'].astype(str)
    
for i in df1['NOTES']:
    if i [:3]=='PRE':
        df1['new']='yes'
    else:
        df1['new']='No'
    
df1
Asked By: Virendra Patel

||

Answers:

Set df1['new'] to a list using a list comprehension and ternary operator:

df1['new'] = ['yes' if i[:3] == 'PRE' else 'no' for i in df1['NOTES']

When setting dataframe columns, you need to set them to lists, not individual elements.

For case-insensitive:

df1['new'] = ['yes' if i[:3].upper() == 'PRE' else 'no' for i in df1['NOTES']
Answered By: The Thonnu

You can use list to apppend the values and then add value to dataframe.

Code –

import pandas as pd
    
df1 = pd.DataFrame({'NOTES': ["PREPAID_HOME_SCREEN_MAMO", "SCREEN_MAMO",
                              "> Unable to connect internet>4G Compatible>Set",
                              "No>Not Barred>Active>No>Available>Others>",
                              "Internet Not Working>>>Unable To Connect To"]})
df1['NOTES'].astype(str)
    
data = []

for i in df1['NOTES']:
    if i[:3]=='PRE':
        data.append('yes')
    else:
        data.append('no')
    
df1['new'] = data
Answered By: user16514821

The code that you posted will update all the ‘new’ column values with ‘yes’ or ‘no’ based on the condition. This happens because you do not already have a column ‘new’.

Try the following :

import pandas as pd    
df1 = pd.DataFrame({'NOTES': ...)

df1['NOTES'].astype(str)
new=['*' for i in range(len(df1['NOTES']))]
for i in range(len(df1['NOTES'])):
  if df1['NOTES'][i][0:3]=="PRE":
      new[i]='Yes'
  else:
      new[i]='No'
df1['new']=new
Answered By: codewhat