我希望仅在DataFrame在使用head()或tail()方法时对其值进行四舍五入以供显示,但我希望DataFrame保留原始值。我尝试使用round方法,但它会改变原始DataFrame中的值。我不想为此目的每次创建单独的副本。是否有其他方法可以做到这一点而不必创建单独的副本?因为某些列具有e^10表示法,所以我浏览数值时遇到了问题。我只想查看最多两到三位小数,并不想一直看指数值。
您可以暂时更改显示选项:
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。
如果您想要更改特定 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
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"))
print(df.head().round(3))
将无法正常工作。也就是说,precision
会覆盖round
。 - Max Ghenispd.option_context('display.precision', 3)
。 - Josh Friedlander