如何在 pandas 中仅对显示的值进行四舍五入,同时保留数据框中的原始值?

18
我希望仅在DataFrame在使用head()或tail()方法时对其值进行四舍五入以供显示,但我希望DataFrame保留原始值。我尝试使用round方法,但它会改变原始DataFrame中的值。我不想为此目的每次创建单独的副本。是否有其他方法可以做到这一点而不必创建单独的副本?因为某些列具有e^10表示法,所以我浏览数值时遇到了问题。我只想查看最多两到三位小数,并不想一直看指数值。
3个回答

34

您可以暂时更改显示选项:

with pd.option_context('display.precision', 3):
    print(df.head())
    
       0      1      2      3      4
0 -0.462 -0.698 -2.030  0.766 -1.670
1  0.925  0.603 -1.062  1.026 -0.096
2  0.589  0.819 -1.040 -0.162  2.467
3 -1.169  0.637 -0.435  0.584  1.232
4 -0.704 -0.623  1.226  0.507  0.507

或永久性地更改它:

pd.set_option('display.precision', 3)

在这种情况下,简单的print(df.head().round(3))也可以工作。它们不会直接更改DataFrame。


这可能很显然,但是如果精度选项低于3,则 print(df.head().round(3)) 将无法正常工作。也就是说,precision 会覆盖 round - Max Ghenis
2
请注意,现在是 pd.option_context('display.precision', 3) - Josh Friedlander

3

如果您想要更改特定 DataFrame 的精度,可以使用 Pandas 的 Styler.format。如果您想让 DataFrame 中的每一列都具有相同的精度,则可以使用以下方法:

df = pd.DataFrame(np.random.random(size=(15, 4)), columns=list('ABCD'))
df.head().style.format(precision=2)

       A       B       C       D
0   0.24    1.00    0.69    0.63
1   0.99    0.22    0.09    0.34
2   0.33    0.24    0.86    0.04
3   0.65    0.13    0.54    0.18
4   0.50    0.70    0.44    0.19

如果要使特定列具有不同的精度,可以使用字典进行格式化:

df.head().style.format({'D':'{:0.5f}'},precision=2)

       A       B       C          D
0   0.24    1.00    0.69    0.63088
1   0.99    0.22    0.09    0.34297
2   0.33    0.24    0.86    0.03709
3   0.65    0.13    0.54    0.18494
4   0.50    0.70    0.44    0.18531

1

pd.set_option('display.precision', 3) 对于 Styler 对象无效。要在 Styler 对象上使用 pd.set_option,请改用 pd.set_option('styler.format.precision', 3)

import numpy as np
import pandas as pd
from IPython.display import display


pd.set_option('styler.format.precision', 3)

df = pd.DataFrame(
    np.random.random(size=(2, 3))
)
display(df.style.set_caption("Styler precision"))

阅读我在其他与此相关的问题上的长篇回答这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接