将PythonPandas数据框中的每个数字四舍五入2位小数

pcrecxhr  于 2022-11-21  发布在  Python
关注(0)|答案(6)|浏览(197)

这是p_table.apply(pd.Series.round),但它没有小数位
Documentation says

import pandas as pd

Series.round(decimals=0, out=None)

我尝试这个p_table.apply(pd.Series.round(2)),但得到这个错误:

unbound method round() must be called with Series instance as first argument (got int instance instead)

如何将数据框中的所有元素四舍五入到两位小数?
[编辑]想通了。

import numpy as np
np.round(p_table, decimals=2)
wribegjk

wribegjk1#

0.17.0版本开始你可以做.round(n)

df.round(2)
      0     1     2     3
0  0.06  0.67  0.77  0.71
1  0.80  0.56  0.97  0.15
2  0.03  0.59  0.11  0.95
3  0.33  0.19  0.46  0.92

df
          0         1         2         3
0  0.057116  0.669422  0.767117  0.708115
1  0.796867  0.557761  0.965837  0.147157
2  0.029647  0.593893  0.114066  0.950810
3  0.325707  0.193619  0.457812  0.920403
mfpqipee

mfpqipee2#

import numpy as np
np.round(p_table, decimals=2)
ryhaxcpt

ryhaxcpt3#

以下是使用pandasround函数执行此操作的示例可重现的可能方法。

# importing pandas as pd 
import pandas as pd 

# generate sample  dataframe  
df = pd.DataFrame(np.random.random([5, 4]), columns =["A", "B", "C"]) 

# use pandas dataframe.round()function to round off all the decimal values to 2 decimal

df.round(2) 

# If you want to customize the round off by individual columns 
df.round({"A":1, "B":2, "C":3})
jogvjijk

jogvjijk4#

A       B    C
0       t       8    10.958904
1       w       2    98.630137

要对C列进行舍入,可以使用以下命令:

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

输出将为:

A       B    C
0       t       8    10.96
1       w       2    98.63
mrphzbgm

mrphzbgm5#

即:data.apply(lambda x: np.round(x, decimals=2))--- timeit。100 x的计时器:0.00356676544494
是一样的,但是慢一些,就像:np.round(data,decimals=2)--- timeit. 100 x的计时器:0.000921095
例如,两者都给出:

x     y     z
Input Sequence                   
1                5.60  0.85 -6.50
2                5.17  0.72 -6.50
3                5.60  0.89 -6.28
4                5.17  0.76 -6.29

对于数据:

x       y       z
Input Sequence                         
1                5.6000  0.8519 -6.5000
2                5.1730  0.7151 -6.5000
3                5.6000  0.8919 -6.2794
4                5.1724  0.7551 -6.2888
5                5.6000  0.9316 -6.0587
flvlnr44

flvlnr446#

对于那些不想舍入DataFrame而只是想将显示的值限制为n小数位数的用户,请改用pd.set_option。此方法将使笔记本上所有打印的DataFrame都遵循该选项。

import pandas as pd
pd.set_option('precision', 2)

编辑

要同时取消科学记数法,请用途:

pd.set_option('float_format', '{:.2f}'.format)

编辑2

结合IPython和pandas选项上下文管理器,您可以用途:

from IPython.display import display

with pd.option_context('precision', 3,
                       'float_format', '{:.2f}'.format):
    display(pd.DataFrame(data={'x':[1,2,3],
                               'y':[4,5,6]}))

编辑3

最新的panda更改了set_option上的API。我不知道它是什么时候更改的,但是1.5.1和更高版本使用'display.precision'而不是'precision'

from IPython.display import display

with pd.ext('display.precision', 3,
            'display.float_format', '{:.2f}'.format):
    display(pd.DataFrame(data={'x':[1,2,3],
                               'y':[4,5,6]}))

奖励

对于numpy,请用途:

np.set_printoptions(precision=2,  # limit to two decimal places in printing numpy
                    suppress=True,  # suppress scientific notation in printing numpy
                   )

如欲了解更多信息,请访问:https://numpy.org/doc/stable/reference/generated/numpy.set_printoptions.html

相关问题