Add a percent sign to a dataframe column in Python

16,497

Solution 1

Cast the dtype to str using astype:

In [11]:
df['Percent'] = df['Grade'].astype(str) + '%'
df

Out[11]:
   Grade     Name Percent
0     82    jimmy     82%
1     38      red     38%
2     55    julie     55%
3     19     brad     19%
4     33  oranges     33%

What you tried just converted the column to a stringified version of a Series:

In [12]:
str(df['Grade'])

Out[12]:
'0    82\n1    38\n2    55\n3    19\n4    33\nName: Grade, dtype: int32'

Solution 2

I find that the easiest way to do it:

df['Percent'] = df['Grade'].map("{:,.2f}%".format)

Solution 3

You can do it like that too :

df['Percent'] = df['Grade'].apply( lambda x : str(x) + '%')
Share:
16,497
Kevin
Author by

Kevin

Updated on July 22, 2022

Comments

  • Kevin
    Kevin almost 2 years

    I've been attempting to add a percent sign to a column in my dataframe but to no avail. Would anyone have any idea?

    import pandas as pd
    
    names = ('jimmy', 'red', 'julie', 'brad', 'oranges')
    score = (82, 38 , 55, 19, 33)
    
    df = pd.DataFrame({'Name': names, 'Grade': score})
    
    df
    Out[20]: 
       Grade     Name
    0     82    jimmy
    1     38      red
    2     55    julie
    3     19     brad
    4     33  oranges
    

    I've made numerous attempts but nothing seems to work out. Here is one failed attempt:

    df['Percent'] = str(df['Grade']) + '%'
    df['Percent']
    Out[22]: 
    0    0    82\n1    38\n2    55\n3    19\n4    33\nN...
    1    0    82\n1    38\n2    55\n3    19\n4    33\nN...
    2    0    82\n1    38\n2    55\n3    19\n4    33\nN...
    3    0    82\n1    38\n2    55\n3    19\n4    33\nN...
    4    0    82\n1    38\n2    55\n3    19\n4    33\nN...
    Name: Percent, dtype: object
    
  • EdChum
    EdChum about 8 years
    apply is not vectorised and will be slow for large dataframes