Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add a percent sign to a dataframe column in Python

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
like image 879
Kevin Avatar asked Feb 26 '16 21:02

Kevin


2 Answers

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'
like image 150
EdChum Avatar answered Oct 19 '22 20:10

EdChum


I find that the easiest way to do it:

df['Percent'] = df['Grade'].map("{:,.2f}%".format)
like image 41
Guilherme Becker Avatar answered Oct 19 '22 21:10

Guilherme Becker