How to round values in Pandas using round()

Learn how to use the Pandas round() function and Numpy ceil() and floor() to round numbers to a given number of decimal places, round them up, or round them down.

How to round values in Pandas using round()
Picture by Andreea Ch, Pexels.
7 minutes to read

When working with numeric data in Pandas you’ll often need to round numbers to the nearest whole number, round them up, round them down, or round them to two decimal places. While Pandas includes the round() function for basic rounding, you’ll need to use a little simple Numpy to do anything slightly more complex. In this quick and easy tutorial, I’ll show you how it’s done.

Import the packages

To get started, open a Jupyter notebook and import the Pandas library and the Numpy library using the as pd and as np naming conventions. We’ll need Numpy as well as Pandas for rounding, since you can’t do everything with standard Pandas functionality.

import pandas as pd
import numpy as np

Create a Pandas dataframe

Next, create a dataframe using the from_dict() function. We’ll include some dummy float values with lots of decimal places so we can round them in various ways.

data = {'sku': ['1', '2', '3', '4'],
        'price': [28.345343, 34.99, 29.000000, 42.3937289]}

df = pd.DataFrame.from_dict(data)
df
sku price
0 1 28.345343
1 2 34.990000
2 3 29.000000
3 4 42.393729

Round a float with round()

If you have a float value you want to round to the nearest whole number you can append the round() method with no arguments. We’ll call df['price].round() and assign the rounded value to a new column called price_round. As you’ll see, this rounds the number but doesn’t change the dtype of the data, so the value will still be a float.

df['price_round'] = df['price'].round()
df
sku price price_round
0 1 28.345343 28.0
1 2 34.990000 35.0
2 3 29.000000 29.0
3 4 42.393729 42.0

Round a float to an integer with round()

Chances are, if you’re rounding a float value to the nearest whole number, you’ll most likely want an integer value like 28, rather than a float like 28.0. To solve this you can change the dtype of the float to int using the astype() method.

df['price_round'] = df['price'].round().astype(int)
df
sku price price_round
0 1 28.345343 28
1 2 34.990000 35
2 3 29.000000 29
3 4 42.393729 42

Round a float to two decimal places

By passing in a value to the round() method you can define the number of decimal places or trailing digits returned. For example, df['price'].round(2) will round 28.345343 to 28.35.

df['price_round_2'] = df['price'].round(2)
df
sku price price_round price_round_2
0 1 28.345343 28 28.35
1 2 34.990000 35 34.99
2 3 29.000000 29 29.00
3 4 42.393729 42 42.39

Round a number up with ceil()

To round a number up in Pandas you need to use Numpy’s ceil() method via the Pandas apply() function. This will calculate the ceiling - or next highest number - of a given float value, so 28.345343 will become 29 rather than the 28 you’d get if you just used round().

df['price_round_up'] = df['price'].apply(np.ceil)
df
sku price price_round price_round_2 price_round_up
0 1 28.345343 28.0 28.35 29.0
1 2 34.990000 35.0 34.99 35.0
2 3 29.000000 29.0 29.00 29.0
3 4 42.393729 42.0 42.39 43.0

Round a number down with floor()

Similarly, to round a number down in Pandas you need to use the Numpy floor() method along with the Pandas apply() function. Given a value like 34.990000 this will round the number down to 34, rather than the 35 you’d get with round().

df['price_round_down'] = df['price'].apply(np.floor)
df
sku price price_round price_round_2 price_round_up price_round_down
0 1 28.345343 28.0 28.35 29.0 28.0
1 2 34.990000 35.0 34.99 35.0 34.0
2 3 29.000000 29.0 29.00 29.0 29.0
3 4 42.393729 42.0 42.39 43.0 42.0

Matt Clarke, Thursday, January 05, 2023

Matt Clarke Matt is an Ecommerce and Marketing Director who uses data science to help in his work. Matt has a Master's degree in Internet Retailing (plus two other Master's degrees in different fields) and specialises in the technical side of ecommerce and marketing.