The right way to round pandas.DataFrame?

28,370

Solution 1

first, you may want to change the definition of your data frame, something like:

data = pd.DataFrame([[1.4,2.5,3.8,4.4,5.6],[6.2,7.6,8.8,9.1,0]]).T

which results this:

     0    1
0  1.4  6.2
1  2.5  7.6
2  3.8  8.8
3  4.4  9.1
4  5.6  0.0

or:

data = pd.DataFrame({'A':[1.4,2.5,3.8,4.4,5.6],'B':[6.2,7.6,8.8,9.1,0]})

so that you get two columns, otherwise the other list is picked up as index; then:

data.apply(pd.Series.round)

or

import numpy as np
data.apply(np.round)

Solution 2

Since pandas 0.17.0 you can use

DataFrame.round(decimals=0, *args, **kwargs)

If you want to round your data to 2 decimals do:

data.round(2)

more info here: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.round.html

Share:
28,370
Michael
Author by

Michael

Updated on July 05, 2022

Comments

  • Michael
    Michael almost 2 years

    I want round pandas.DataFrame.

    Here is what i have tried so far:

    import pandas as pd
    data = pd.DataFrame([1.4,2.5,3.8,4.4,5.6],[6.2,7.6,8.8,9.1,0])
    print(round(data))
    

    But when i run this code, i get the following error:

    Traceback (most recent call last):
      File "C:\Users\*****\Documents\*****\******\****.py", line 3, in <module>
        print(round(data))
    TypeError: type DataFrame doesn't define __round__ method
    

    What is the right way to round pandas.DataFrame ?

  • Michael
    Michael over 10 years
    this rounds only first column
  • behzad.nouri
    behzad.nouri over 10 years
    the way you are making the dataframe, the other column is index, pandas apply the functions to columns not the index
  • Michael
    Michael over 10 years
    what about series, how can i round them?
  • behzad.nouri
    behzad.nouri over 10 years
    series have method round, so just ts.round
  • Michael
    Michael over 10 years
    Here is the best solution: np.round(data, decimals=0)