learning_to_code
learning_to_code

Reputation: 31

How to add a prefix to a string if it ends with a particular character (Pandas) i.e. add '-' to string given it ends with '-'

For a particular column (dtype = object), how can I add '-' to the start of the string, given it ends with '-'.

i.e convert: 'MAY500-' to '-May500-'

(I need to add this to every element in the column)

Upvotes: 0

Views: 961

Answers (4)

Akshay Gupta
Akshay Gupta

Reputation: 72

I have a knack for using apply with lambda functions a lot. It just makes the code a lot easier to read.

df['value'] = df['value'].apply(lambda x: '-'+str(x) if str(x).endswith('-') else x)

Upvotes: 1

Nicholas Broad
Nicholas Broad

Reputation: 46

def add_prefix(text):
    # If text is null or empty string the -1 index will result in IndexError
    if text and text[-1] == "-":
        return "-"+text
    return text

df = pd.DataFrame(data={'A':["MAY500", "MAY500-", "", None, np.nan]})
# Change the column to string dtype first
df['A'] = df['A'].astype(str)
df['A'] = df['A'].apply(add_prefix)

0      MAY500
1    -MAY500-
2            
3        None
4         nan
Name: A, dtype: object

Upvotes: 1

ThePyGuy
ThePyGuy

Reputation: 18406

You can use np.select Given a dataframe like this:

df
  values
0  abcd-
1  a-bcd
2   efg-

You can use np.select as follows:

df['values'] = np.select([df['values'].str.endswith('-')], ['-' + df['values']], df['values'])

output:

df
   values
0  -abcd-
1   a-bcd
2   -efg-

Upvotes: 2

Pablo C
Pablo C

Reputation: 4761

Try something like this:

#setup
df = pd.DataFrame({'col':['aaaa','bbbb-','cc-','dddddddd-']})

mask = df.col.str.endswith('-'), 'col'
df.loc[mask] = '-' + df.loc[mask]

Output

df
          col
0        aaaa
1      -bbbb-
2        -cc-
3  -dddddddd-

Upvotes: 3

Related Questions