round a single column in pandas

66

Is there a way to round a single column in pandas without affecting the rest of the dataframe?

 df:
      item  value1  value2
    0    a    1.12     1.3
    1    a    1.50     2.5
    2    a    0.10     0.0
    3    b    3.30    -1.0
    4    b    4.80    -1.0

df.value1.apply(np.round) gives

0    1
1    2
2    0
3    3
4    5
5    5

What is the correct way to make data look like this:

  item  value1  value2
0    a       1     1.3
1    a       2     2.5
2    a       0     0.0
3    b       3    -1.0
4    b       5    -1.0
5    c       5     5.0

This question is tagged with python pandas

~ Asked on 2014-10-01 03:11:41

The Best Answer is


82

You are very close. You applied the round to the series of values given by df.value1. The return type is thus a Series. You need to assign that series back to the dataframe (or another dataframe with the same Index).

Also, there is a pandas.Series.round method which is basically a short hand for pandas.Series.apply(np.round).

In[2]: 
    df.value1 = df.value1.round()
    print df

Out[2]:
    item  value1  value2
    0    a       1     1.3
    1    a       2     2.5
    2    a       0     0.0
    3    b       3    -1.0
    4    b       5    -1.0

~ Answered on 2014-10-01 03:24:10


47

For some reason the round() method doesn't work if you have float numbers with many decimal places, but this will.

decimals = 2    
df['column'] = df['column'].apply(lambda x: round(x, decimals))

~ Answered on 2017-05-10 16:15:31


Most Viewed Questions: