## Search

Rated 4.0/5 based on 20 customer reviews

859

Why WebDriver-3?

In present market we have a tool called IDE. It is a tool which works only on Mozilla firefox. It has many drawbacks and doesn’t generate proper reports. IDE is not a preferred tool because sometimes when the scripts run, it finds the locator and sometimes it doesn’t find it and so the script fails. So, to overcome all these challenges we have a tool called WebDriver.

WebDriver works on Multiple browsers like Firefox, IE, Chrome, Safari, Opera etc. It supports multiple languages like Java, C#, Ruby, Python and JavaScript. With WebDriver, we can make dynamic scripts like scripts on Webpages which changes everyday and we can make our scripts run on multiple browsers.

Also, click on Change log at Selenium website to describe what has changed in the new version. The last 2.x version was 2.53 which is a stable build, meaning it has no major issues. After 2.53, the next build which came up was 3.XX. The changes made in 3.0 is that, minimum java version requires 1.8, where we need to make sure that jdk8 is installed.

Installing Java

2. Go to first link as shown below

If we are using v2.53.0 version, then we will be needing Firefox 40 or below. In case, we are using 3.0 then we need to go for latest version of Firefox.

Configuring Jar Files in Eclipse

• Step1: Open Eclipse and make a New Project (ex:Sample)
• Step2: Right click on the project and select the option Properties as shown below

• Step3: Go to Java Build Path > Libraries Tab and click on Add External Jars as shown below:

Now, go to the location where we saved our Jar Files and add all the jar files. It will appear like below image after adding all Jar files:

Once we are done with configuring Jar files in eclipse, we can see a folder called Referenced Libraries under Project folder where we have all our Jar Files.

Architecture of selenium webdriver 3

First we need to know a few concepts if we want to understand the working of Selenium WebDriver Architecture.

1. Language Binding or Selenium Client Library
2. Selenium API
3. Remote WebDriver
4. Json Wired Protocol
5. WebDrivers
1. Language Binding or Selenium Client Library : It is nothing but a collection of Jar files, where the language in which we write our selenium framework is present. It means that the language which we used to write the script may be Java, C#, Ruby, Python, perl.
2. Selenium API : API Stands for Application Programming Interface. API is a particular set of rules and specifications that software programs can follow to communicate with each other. API serves as an interface between software program and facilitate their interaction. API is a software to software interaction which means API works between software to software. With the help of APIs, applications talk to each other without any user knowledge.
3. Remote WebDriver : It is an implementation class of the webdriver interface that a test script developer can use to execute their test script through webdriver server on remote machine.
4. JSON:  It stands for JavaScript Object Notation. It is a lightweight data interchange format which helps us to interchange the data. JSON is used to transfer data between client and server on the web. A simple JSON file has .json extension. JSON wired protocol send data in JSON format. Thereafter, the server will firstly parse the data and execute it and after that, response given by the server will be sent back to the client in JSON format.
5. Webdriver: Webdriver is a tool for automating web applications and verifying that     they work as expected.

Architecture:

Tester writes script in any language like java, C# etc and selenium client library will communicate with selenium API. Selenium API will send the command taken from language level binding to browser driver with the help of JSON wired protocol and sends the request to Browser Driver, it may be Firefox driver, IE driver, Chrome driver. When we run all the commands we write in the script, it is converted with JSON wired protocol over HTTP and it will convert into URL and the request made by the HTTP and send to the browser. These browser drivers will use the HTTP server for getting HTTP request and these HTTP Server filter out all commands which we need to execute.

Drivers for Firefox, IE, Chrome

• FirefoxDriver: It is an inbuilt class in Selenium. Lets create a New Class in Eclipse

Class Name: Drivers_Selenium

Inside main function, create an object of FirefoxDriver class like shown below:

FirefoxDriver is an inbuilt class inside Referenced Libraries jars, where we can move mouse over the error and import FirefoxDriver class. After creating the object and running the program, we will get an exception like “The path to the driver executable must be set by the webdriver.gecko.driver system property” like shown in below image.

import org.openqa.selenium.firefox.FirefoxDriver;

public class Drivers_Selenium {

public static void main(String[] args) {

// TODO Auto-generated method stub

new FirefoxDriver();

}

}

Step1: Go to seleniumhq.org

Step3: Click on Mozilla Geckodriver 0.16.1 version in browsers session

Step4: Click on geckodriver-v0.17.0-win64.zip or geckodriver-v0.17.0-win32.zip based upon our operating system.

Open the downloaded folder and extract it, after extracting we will get geckodriver.exe

file like shown below image.

Now there is no need to double click on the geckodriver file, all we need is to set the System property known as “webdriver.gecko.driver” and we have to give the path of  geckodriver exe file. As java is a case sensitive language make sure that “webdriver.gecko.driver” is in lower case.

Run the program where we can see a blank firefox getting opened.

Now we need to give object reference as “FirefoxDriver fd” so that we can use the features of FirefoxDriver object. Inside the documentation of selenium, we find WebDriver interface. Inside this interface, we see a function get( ) which loads the new webpage in the current browser window. It open up a new URL.We can use the function “fd.get ” and get the URL.

Run the above program where we can see the browser launching and it opens yahoo.com

• ChromeDriver : As the name suggests, it is for chrome. After creating the object and running the program, we will get an exception like “The path to the driver executable must be set by the webdriver.chrome.driver system property”.Now we also need to download an exe file.Go to download session in seleniumhq.org and scroll down where we find Google Chrome Driver link and click on it and it will redirect to the next page. From here we can download based upon our operating system as shown in below image.Whatever be the operating system, whether it is 32xbit or 64xbit, we can download the same file.

Open the downloaded folder and extract it, after extracting we will get “chromedriver” file like shown in the below image.

Now, there is no need to double click on chromedriver file, all we need to do is set the System property known as “webdriver.chrome.driver” and we have to give the path of chromedriver.exe file. As java is a case sensitive language, make sure that “webdriver.chrome.driver” is in lower case.

Run the above program where we can see a blank chrome browser will launch.

Now we need to give object reference as “ChromeDriver ” so that we can use the features of ChromeDriver object. Inside the documentation of selenium, we find WebDriver interface.Inside this interface we see a function get( ) which loads the new webpage in the current browser window. It opens up a new URL.We can use the function “cd.get ” and get the URL.

Run the above program where we can see the Chrome browser launching and open it on yahoo.com

• IEDriver: As the name suggests it is for InternetExplorer. After creating the object and running the program, we will get an exception like “The path to the driver executable must be set by the webdriver.ie.driver system property”.Now we also need to download an exe file.Go to download session in seleniumhq.org and scroll down where we find IE Driver link and click on it and it will reside to next page from here we can download based upon our operating system, as shown in the below image.What ever be the operating system, whether it is 32xbit or 64xbit, we can download the same file.

Open the downloaded folder and extract it, after extracting we will get “ieDriver” file.

Now no need of double click on iedriver file, all we need is to set the System property known as “webdriver.ie.driver” and we have to give the path of  ie exe file. As java is a case sensitive language, make sure that “webdriver.ie.driver” is in lowercase.

Now we need to give object reference as “IEDriver ” so that we can use the features of IEDriver object.Inside the documentation of selenium, we find WebDriver interface. Inside this interface, we see a function get( ) which loads the new webpage in the current browser window. It opens up a new URL.We can use the function “ie.get ” and get the URL.

Run the above program where we can see the IE browser launching and open it in yahoo.com

• Launching Browsers Dynamically

Let us Create New Class “Launch Browsers”

Let us build a Testcase. Now our requirement is that we have a parameter called browser. If we write parameter as “Mozilla”, then the script we write in testcase should run in Mozilla browser. If we write a parameter as “Chrome”, it should run on chrome. Later on, we read this parameter from an excel file (xls) or any other file like property file, xml file.

If our browser is Mozilla then below script should execute on Mozilla. If the browser is Mozilla then we want to launch the FirefoxDriver and take this FirefoxDriver to launch our desired website.

In the above example, we keep on repeating the line to launch any website like fd.get(“http://gmail.com”). Later on if we want to click on a link in firefox then we need to write the code for each browsers separately. To overcome this, we use a concept called Interface reference points towards the class implementing the interface.

WebDriver   d = new FirefoxDriver( );

WebDriver   d1= new ChromeDriver( );

Webdriver is an Interface and FirefoxDriver, ChromeDriver, IEDriver are implementing that Interface. Here d1 is  pointing towards chrome, so we can make d1 point towards FirefoxDriver as well , because the reference of the webdriver interface can point towards any implementing class or we can make d1 point towards InternetExplorerDriver as well, like shown below.

d1 = new FirefoxDriver( );

d1 = new InternetExplorerDriver( );

So in the beginning of the program we can write

WebDriver driver  =  null;

Here Null means that driver is not pointing anywhere. So based on our choice, we can make driver point towards FirefoxDriver (or) ChromeDriver (or) InternetExplorerDriver as shown in the below program. Initially driver is “null”. Based on the options, driver will be initialized and we can give the command driver.get(“http://gmail.com”);

All the driver classes will have same set of functions coming from WebDriver Interface,

so “get” function will be there in all the driver classes.

From the above program, we can launch the browser dynamically and we have to write a single script after launching the browser to interact with the browser. We do not need to write browser specific script. The reasons are : firstly all the drivers have same set of functions and secondly, the driver can point towards any of the driver classes like ChromeDriver, IEDriver.

• Selenium RC and WebDriver

• What is Firefox profile

Let’s take an example where we have a PC at our place, being shared by two people. If the first person opens the PC and goes to Firefox, then firefox should get opened and it should have 1st person set of settings, his own set of bookmarks, his own set of plugins installed inside it. If a 2nd person opens PC and goes to Firefox, he should have his own set of settings, his own set of bookmarks, his own set of plugins. This concept is know as Firefox Profile.

• Importance of Firefox profile

First where selenium launches Firefox, we write-

driver  = new FirefoxDriver( );

Selenium will create its own profile and launch the browser. That profile is created programmatically by selenium and it gets destroyed when the script stops.

• Creating Profile manually on our PC

Go to Firefox browser -> Go to File option and select Exit to close the firefox from the Exit menu, we should not close the firefox from the (x) option on the top as shown in below image.

Go to windows session and type “firefox.exe -p profilemanager”. Copy the command and it will open the window as shown below.

Click on Create Profile and give name as Selenium_Mod11. Click on the Finish button and click Start Firefox button where a new firefox browser will open up and this firefox browser will be like freshly installed firefox on our machine. It will have no bookmarks, no plugins, no history etc.

Go to Firefox browser and bookmark the page as shown below

Create a New Class -> Selenium_Profiles

Run the program where it will open Firefox browser with Google Bookmark as shown in below image

• Close and Quit Difference

driver.quit( ): It will end selenium session and close all browsers in the current session.

Suppose we go to a website and click on a link, that link will open in new pop-up and if we fire driver.quit( ), then selenium will close all the browsers and end the selenuim session.

driver.close( ): It won’t end selenuim session, but it closes the browser on which current focus is there.

• Importing Webdriver documentation in eclipse.

http://seleniumhq.github.io/selenium/docs/api/java/index.html” and go to the project -> Right click and go to Properties->Go to Java Build Path and expand the link and click on the Javadoc location: (None).

Click on Edit button and paste the URL and remove index.html and click on validate button and click OK button.

• Webdriver Desired Capabilities Class

It helps us understand Selenium, and under which circumstances the script should run. Below example shows how we should run script on Mozilla with Javascript enabled on a windows platform.

### Raghav Globalservices

Blog Author

Raghav has 8+ years of experience with 7+ years of experience in Automation Testing using Selenium, Appium, Ranorex tools etc. in multiple project domains. He is a Consultant &amp; Trainer has trained more than 6000+ US, UK, Russian &amp; Indian students &amp; is a corporate Trainer for several MNCs. <a href="https://www.linkedin.com/in/aroraraghav/" rel="no follow">linkedin.com</a>

## How to Round Numbers in Python

While you are dealing with data, sometimes you may come across a biased dataset. In statistics, bias is whereby the expected value of the results differs from the true underlying quantitative parameter being estimated. Working with such data can be dangerous and can lead you to incorrect conclusions. To learn more about various other concepts of Python, go through our Python Tutorials or enroll to our Python Certification course online.There are many types of biases such as selection bias, reporting bias, sampling bias and so on. Similarly, rounding bias is related to numeric data. In this article we will see:Why is it important to know the ways to round numbersHow to use various strategies to round numbersHow data is affected by rounding itHow to use NumPy arrays and Pandas DataFrames to round numbersLet us first learn about Python’s built-in rounding process.About Python’s Built-in round() FunctionPython Programming offers a built-in round() function which rounds off a number to the given number of digits and makes rounding of numbers easier. The function round() accepts two numeric arguments, n and n digits and then returns the number n after rounding it to ndigits. If the number of digits are not provided for round off, the function rounds off the number n to the nearest integer.Suppose, you want to round off a number, say 4.5. It will be rounded to the nearest whole number which is 5. However, the number 4.74 will be rounded to one decimal place to give 4.7.It is important to quickly and readily round numbers while you are working with floats which have many decimal places. The inbuilt Python function round() makes it simple and easy.Syntaxround(number, number of digits)The parameters in the round() function are:number - number to be roundednumber of digits (Optional) - number of digits up to which the given number is to be rounded.The second parameter is optional. In case, if it is missing then round() function returns:For an integer, 12, it rounds off to 12For a decimal number, if the last digit after the decimal point is >=5 it will round off to the next whole number, and if =5 print(round(5.476, 2))     # when the (ndigit+1)th digit is  1 print(round("x", 2)) TypeError: type str doesn't define __round__ methodAnother example,print(round(1.5)) print(round(2)) print(round(2.5))The output will be:2 2 2The function round() rounds 1.5 up to 2, and 2.5 down to 2. This is not a bug, the round() function behaves this way. In this article you will learn a few other ways to round a number. Let us look at the variety of methods to round a number.Diverse Methods for RoundingThere are many ways to round a number with its own advantages and disadvantages. Here we will learn some of the techniques to rounding a number.TruncationTruncation, as the name means to shorten things. It is one of the simplest methods to round a number which involves truncating a number to a given number of digits. In this method, each digit after a given position is replaced with 0. Let us look into some examples.ValueTruncated ToResult19.345Tens place1019.345Ones place1919.345Tenths place19.319.345Hundredths place19.34The truncate() function can be used for positive as well as negative numbers:>>> truncate(19.5) 19.0 >>> truncate(-2.852, 1) -2.8 >>> truncate(2.825, 2) 2.82The truncate() function can also be used to truncate digits towards the left of the decimal point by passing a negative number.>>> truncate(235.7, -1) 230.0 >>> truncate(-1936.37, -3) -1000.0When a positive number is truncated, we are basically rounding it down. Similarly, when we truncate a negative number, the number is rounded up. Let us look at the various rounding methods.Rounding UpThere is another strategy called “rounding up” where a number is rounded up to a specified number of digits. For example:ValueRound Up ToResult12.345Tens place2018.345Ones place1918.345Tenths place18.418.345Hundredths place18.35The term ceiling is used in mathematics to explain the nearest integer which is greater than or equal to a particular given number. In Python, for “rounding up” we use two functions namely,ceil() function, andmath() functionA non-integer number lies between two consecutive integers. For example, considering a number 5.2, this will lie between 4 and 5. Here, ceiling is the higher endpoint of the interval, whereas floor is the lower one. Therefore, ceiling of 5.2 is 5, and floor of 5.2 is 4. However, the ceiling of 5 is 5.In Python, the function to implement the ceiling function is the math.ceil() function. It always returns the closest integer which is greater than or equal to its input.>>> import math >>> math.ceil(5.2) 6 >>> math.ceil(5) 5 >>> math.ceil(-0.5) 0If you notice you will see that the ceiling of -0.5 is 0, and not -1.Let us look into a short code to implement the “rounding up” strategy using round_up() function:def round_up(n, decimals=0):     multiplier = 10 ** decimals     return math.ceil(n * multiplier) / multiplierLet’s look at how round_up() function works with various inputs:>>> round_up(3.1) 4.0 >>> round_up(3.23, 1) 3.3 >>> round_up(3.543, 2) 3.55You can pass negative values  to decimals, just like we did in truncation.>>> round_up(32.45, -1) 40.0 >>> round_up(3352, -2) 3400You can follow the diagram below to understand round up and round down. Round up to the right and down to the left.Rounding up always rounds a number to the right on the number line, and rounding down always rounds a number to the left on the number line.Rounding DownSimilar to rounding up we have another strategy called rounding down whereValueRounded Down ToResult19.345Tens place1019.345Ones place1919.345Tenths place19.319.345Hundredths place19.34In Python, rounding down can be implemented using a similar algorithm as we truncate or round up. Firstly you will have to shift the decimal point and then round an integer. Lastly shift the decimal point back.math.ceil() is used to round up to the ceiling of the number once the decimal point is shifted. For “rounding down” we first need to round the floor of the number once the decimal point is shifted.>>> math.floor(1.2) 1 >>> math.floor(-0.5) -1Here’s the definition of round_down():def round_down(n, decimals=0):     multiplier = 10 ** decimals return math.floor(n * multiplier) / multiplierThis is quite similar to round_up() function. Here we are using math.floor() instead of math.ceil().>>> round_down(1.5) 1 >>> round_down(1.48, 1) 1.4 >>> round_down(-0.5) -1Rounding a number up or down has extreme effects in a large dataset. After rounding up or down, you can actually remove a lot of precision as well as alter computations.Rounding Half UpThe “rounding half up” strategy rounds every number to the nearest number with the specified precision, and breaks ties by rounding up. Here are some examples:ValueRound Half Up ToResult19.825Tens place1019.825Ones place2019.825Tenths place19.819.825Hundredths place19.83In Python, rounding half up strategy can be implemented by shifting the decimal point to the right by the desired number of places. In this case you will have to determine whether the digit after the shifted decimal point is less than or greater than equal to 5.You can add 0.5 to the value which is shifted and then round it down with the math.floor() function.def round_half_up(n, decimals=0):     multiplier = 10 ** decimals return math.floor(n*multiplier + 0.5) / multiplierIf you notice you might see that round_half_up() looks similar to round_down. The only difference is to add 0.5 after shifting the decimal point so that the result of rounding down matches with the expected value.>>> round_half_up(19.23, 1) 19.2 >>> round_half_up(19.28, 1) 19.3 >>> round_half_up(19.25, 1) 19.3Rounding Half DownIn this method of rounding, it rounds to the nearest number similarly like “rounding half up” method, the difference is that it breaks ties by rounding to the lesser of the two numbers. Here are some examples:ValueRound Half Down ToResult16.825Tens place1716.825Ones place1716.825Tenths place16.816.825Hundredths place16.82In Python, “rounding half down” strategy can be implemented by replacing math.floor() in the round_half_up() function with math.ceil() and then by subtracting 0.5 instead of adding:def round_half_down(n, decimals=0):     multiplier = 10 ** decimals return math.ceil(n*multiplier - 0.5) / multiplierLet us look into some test cases.>>> round_half_down(1.5) 1.0 >>> round_half_down(-1.5) -2.0 >>> round_half_down(2.25, 1) 2.2In general there are no bias for both round_half_up() and round_half_down(). However, rounding of data with more number of ties results in bias. Let us consider an example to understand better.>>> data = [-2.15, 1.45, 4.35, -12.75]Let us compute the mean of these numbers:>>> statistics.mean(data) -2.275Now let us compute the mean on the data after rounding to one decimal place with round_half_up() and round_half_down():>>> rhu_data = [round_half_up(n, 1) for n in data] >>> statistics.mean(rhu_data) -2.2249999999999996 >>> rhd_data = [round_half_down(n, 1) for n in data] >>> statistics.mean(rhd_data) -2.325The round_half_up() function results in a round towards positive infinity bias, and round_half_down() results in a round towards negative infinity bias.Rounding Half Away From ZeroIf you have noticed carefully while going through round_half_up() and round_half_down(), neither of the two is symmetric around zero:>>> round_half_up(1.5) 2.0 >>> round_half_up(-1.5) -1.0 >>> round_half_down(1.5) 1.0 >>> round_half_down(-1.5) -2.0In order to introduce symmetry, you can always round a tie away from zero. The table mentioned below illustrates it clearly:ValueRound Half Away From Zero ToResult16.25Tens place2016.25Ones place1616.25Tenths place16.3-16.25Tens place-20-16.25Ones place-16-16.25Tenths place-16.3The implementation of “rounding half away from zero” strategy on a number n is very simple. All you need to do is start as usual by shifting the decimal point to the right a given number of places and then notice the digit d immediately to the right of the decimal place in this new number. Here, there are four cases to consider:If n is positive and d >= 5, round upIf n is positive and d < 5, round downIf n is negative and d >= 5, round downIf n is negative and d < 5, round upAfter rounding as per the rules mentioned above, you can shift the decimal place back to the left.There is a question which might come to your mind - How do you handle situations where the number of positive and negative ties are drastically different? The answer to this question brings us full circle to the function that deceived us at the beginning of this article: Python’s built-in  round() function.Rounding Half To EvenThere is a way to mitigate rounding bias while you are rounding values in a dataset. You can simply round ties to the nearest even number at the desired precision. Let us look at some examples:ValueRound Half To Even ToResult16.255Tens place2016.255Ones place1616.255Tenths place16.216.255Hundredths place16.26To prove that round() really does round to even, let us try on a few different values:>>> round(4.5) 4 >>> round(3.5) 4 >>> round(1.75, 1) 1.8 >>> round(1.65, 1) 1.6The Decimal ClassThe  decimal module in Python is one of those features of the language which you might not be aware of if you have just started learning Python. Decimal “is based on a floating-point model which was designed with people in mind, and necessarily has a paramount guiding principle – computers must provide an arithmetic that works in the same way as the arithmetic that people learn at school.” – except from the decimal arithmetic specification. Some of the benefits of the decimal module are mentioned below -Exact decimal representation: 0.1 is actually 0.1, and 0.1 + 0.1 + 0.1 - 0.3 returns 0, as expected.Preservation of significant digits: When you add 1.50 and 2.30, the result is 3.80 with the trailing zero maintained to indicate significance.User-alterable precision: The default precision of the decimal module is twenty-eight digits, but this value can be altered by the user to match the problem at hand.Let us see how rounding works in the decimal module.>>> import decimal >>> decimal.getcontext() Context(     prec=28,     rounding=ROUND_HALF_EVEN,     Emin=-999999,     Emax=999999,     capitals=1,     clamp=0,     flags=[],     traps=[         InvalidOperation,         DivisionByZero,         Overflow     ] )The function decimal.getcontext() returns a context object which represents the default context of the decimal module. It also includes the default precision and the default rounding strategy.In the above example, you will see that the default rounding strategy for the decimal module is ROUND_HALF_EVEN. It allows to align with the built-in round() functionLet us create a new Decimal instance by passing a string containing the desired value and declare a number using the decimal module’s Decimal class.>>> from decimal import Decimal >>> Decimal("0.1") Decimal('0.1')You may create a Decimal instance from a floating-point number but in that case, a floating-point representation error will be introduced. For example, this is what happens when you create a Decimal instance from the floating-point number 0.1>>> Decimal(0.1) Decimal('0.1000000000000000055511151231257827021181583404541015625')You may create Decimal instances from strings containing the decimal numbers you need in order to maintain exact precision.Rounding a Decimal using the .quantize() method:>>> Decimal("1.85").quantize(Decimal("1.0")) Decimal('1.8')The Decimal("1.0") argument in .quantize() allows to determine the number of decimal places in order to round the number. As 1.0 has one decimal place, the number 1.85 rounds to a single decimal place. Rounding half to even is the default strategy, hence the result is 1.8.Decimal class:>>> Decimal("2.775").quantize(Decimal("1.00")) Decimal('2.78')Decimal module provides another benefit. After performing arithmetic the rounding is taken care of automatically and also the significant digits are preserved.>>> decimal.getcontext().prec = 2 >>> Decimal("2.23") + Decimal("1.12") Decimal('3.4')To change the default rounding strategy, you can set the decimal.getcontect().rounding property to any one of several  flags. The following table summarizes these flags and which rounding strategy they implement:FlagRounding Strategydecimal.ROUND_CEILINGRounding updecimal.ROUND_FLOORRounding downdecimal.ROUND_DOWNTruncationdecimal.ROUND_UPRounding away from zerodecimal.ROUND_HALF_UPRounding half away from zerodecimal.ROUND_HALF_DOWNRounding half towards zerodecimal.ROUND_HALF_EVENRounding half to evendecimal.ROUND_05UPRounding up and rounding towards zeroRounding NumPy ArraysIn Data Science and scientific computation, most of the times we store data as a  NumPy array. One of the most powerful features of NumPy is the use of  vectorization and broadcasting to apply operations to an entire array at once instead of one element at a time.Let’s generate some data by creating a 3×4 NumPy array of pseudo-random numbers:>>> import numpy as np >>> np.random.seed(444) >>> data = np.random.randn(3, 4) >>> data array([[ 0.35743992,  0.3775384 ,  1.38233789,  1.17554883],        [-0.9392757 , -1.14315015, -0.54243951, -0.54870808], [ 0.20851975, 0.21268956, 1.26802054, -0.80730293]])Here, first we seed the np.random module to reproduce the output easily. Then a 3×4 NumPy array of floating-point numbers is created with np.random.randn().Do not forget to install pip3 before executing the code mentioned above. If you are using  Anaconda you are good to go.To round all of the values in the data array, pass data as the argument to the  np.around() function. The desired number of decimal places is set with the decimals keyword argument. In this case, round half to even strategy is used similar to Python’s built-in round() function.To round the data in your array to integers, NumPy offers several options which are mentioned below:numpy.ceil()numpy.floor()numpy.trunc()numpy.rint()The np.ceil() function rounds every value in the array to the nearest integer greater than or equal to the original value:>>> np.ceil(data) array([[ 1.,  1.,  2.,  2.],        [-0., -1., -0., -0.], [ 1., 1., 2., -0.]])Look at the code carefully, we have a new number! Negative zero! Let us now take a look at Pandas library, widely used in Data Science with Python.Rounding Pandas Series and DataFramePandas has been a game-changer for data analytics and data science. The two main data structures in Pandas are Dataframe and Series. Dataframe works like an Excel spreadsheet whereas you can consider Series to be columns in a spreadsheet. Series.round() and DataFrame.round() methods. Let us look at an example.Do not forget to install pip3 before executing the code mentioned above. If you are using  Anaconda you are good to go.>>> import pandas as pd >>> # Re-seed np.random if you closed your REPL since the last example >>> np.random.seed(444) >>> series = pd.Series(np.random.randn(4)) >>> series 0    0.357440 1    0.377538 2    1.382338 3    1.175549 dtype: float64 >>> series.round(2) 0    0.36 1    0.38 2    1.38 3    1.18 dtype: float64 >>> df = pd.DataFrame(np.random.randn(3, 3), columns=["A", "B", "C"]) >>> df           A         B         C 0 -0.939276 -1.143150 -0.542440 1 -0.548708  0.208520  0.212690 2  1.268021 -0.807303 -3.303072 >>> df.round(3)        A      B      C 0 -0.939 -1.143 -0.542 1 -0.549  0.209  0.213 2  1.268 -0.807 -3.303 The DataFrame.round() method can also accept a dictionary or a Series, to specify a different precision for each column. For instance, the following examples show how to round the first column of df to one decimal place, the second to two, and the third to three decimal places: >>> # Specify column-by-column precision with a dictionary >>> df.round({"A": 1, "B": 2, "C": 3})      A     B      C 0 -0.9 -1.14 -0.542 1 -0.5  0.21  0.213 2  1.3 -0.81 -3.303 >>> # Specify column-by-column precision with a Series >>> decimals = pd.Series([1, 2, 3], index=["A", "B", "C"]) >>> df.round(decimals)      A     B      C 0 -0.9 -1.14 -0.542 1 -0.5  0.21  0.213 2  1.3 -0.81 -3.303 If you need more rounding flexibility, you can apply NumPy's floor(), ceil(), and print() functions to Pandas Series and DataFrame objects: >>> np.floor(df)      A    B    C 0 -1.0 -2.0 -1.0 1 -1.0  0.0  0.0 2  1.0 -1.0 -4.0 >>> np.ceil(df)      A    B    C 0 -0.0 -1.0 -0.0 1 -0.0  1.0  1.0 2  2.0 -0.0 -3.0 >>> np.rint(df)      A    B    C 0 -1.0 -1.0 -1.0 1 -1.0  0.0  0.0 2  1.0 -1.0 -3.0 The modified round_half_up() function from the previous section will also work here: >>> round_half_up(df, decimals=2)       A     B     C 0 -0.94 -1.14 -0.54 1 -0.55  0.21  0.21 2 1.27 -0.81 -3.30Best Practices and ApplicationsNow that you have come across most of the rounding techniques, let us learn some of the best practices to make sure we round numbers in the correct way.Generate More Data and Round LaterSuppose you are dealing with a large set of data, storage can be a problem at times. For example, in an industrial oven you would want to measure the temperature every ten seconds accurate to eight decimal places, using a temperature sensor. These readings will help to avoid large fluctuations which may lead to failure of any heating element or components. We can write a Python script to compare the readings and check for large fluctuations.There will be a large number of readings as they are being recorded each and everyday. You may consider to maintain three decimal places of precision. But again, removing too much precision may result in a change in the calculation. However, if you have enough space, you can easily store the entire data at full precision. With less storage, it is always better to store at least two or three decimal places of precision which are required for calculation.In the end, once you are done computing the daily average of the temperature, you may calculate it to the maximum precision available and finally round the result.Currency Exchange and RegulationsWhenever we purchase an item from a particular place, the tax amount paid against the amount of the item depends largely on geographical factors. An item which costs you $2 may cost you less (say$1.8)  if you buy the same item from a different state. It is due to regulations set forth by the local government.In another case, when the minimum unit of currency at the accounting level in a country is smaller than the lowest unit of physical currency, Swedish rounding is done. You can find a list of such rounding methods used by various countries if you look up on the internet.If you want to design any such software for calculating currencies, keep in mind to check the local laws and regulations applicable in your present location.Reduce errorAs you are rounding numbers in a large datasets used in complex computations, your primary concern should be to limit the growth of the error due to rounding.SummaryIn this article we have seen a few methods to round numbers, out of those “rounding half to even” strategy minimizes rounding bias the best. We are lucky to have Python, NumPy, and Pandas already have built-in rounding functions to use this strategy. Here, we have learned about -Several rounding strategies, and how to implement in pure Python.Every rounding strategy inherently introduces a rounding bias, and the “rounding half to even” strategy mitigates this bias well, most of the time.You can round NumPy arrays and Pandas Series and DataFrame objects.If you enjoyed reading this article and found it to be interesting, leave a comment. To learn more about rounding numbers and other features of Python, join our Python certification course.
Rated 5.0/5 based on 43 customer reviews
12951
How to Round Numbers in Python

While you are dealing with data, sometimes you may... Read More

## Swift Vs Python

Rated 4.5/5 based on 19 customer reviews
9952
Swift Vs Python

Programming Languages: Their popularity Every pas... Read More