【发布时间】:2017-08-30 06:49:39
【问题描述】:
默认情况下,数据框中的数值最多只能存储 6 位小数。如何获得完整的精度。
例如
34.98774564765 存储为 34.987746。我确实想要完整的价值。
而 0.00000565 存储为 0..
除了将格式应用于每个数据帧之外,还有任何有助于保持精度的全局设置。
谢谢
【问题讨论】:
-
你能发布一个可重现的例子吗?
默认情况下,数据框中的数值最多只能存储 6 位小数。如何获得完整的精度。
例如
34.98774564765 存储为 34.987746。我确实想要完整的价值。
而 0.00000565 存储为 0..
除了将格式应用于每个数据帧之外,还有任何有助于保持精度的全局设置。
谢谢
【问题讨论】:
您的数据存储的精度与您的数据类型相对应(np.float16、np.float32、np.float64)。
pd.options.display.precision - 允许您更改 printing 数据的精度
【讨论】:
不,34.98774564765 只是默认打印了六个小数位:
>>> pandas.DataFrame([34.98774564765])
0
0 34.987746
数据本身具有更高的精度:
>>> pandas.DataFrame([34.98774564765])[0].data[0]
34.98774564765
您可以通过更改pandas.options.display.precision 来更改用于打印框架的默认值。
例如:
>>> pandas.set_option("display.precision", 8)
>>> pandas.DataFrame([34.98774564765])
0
0 34.98774564765
【讨论】:
display.precision 选项
astype也受到了影响,所以column.astype(str)[0]会被截断
c.astype(np.float64).astype(str) 解决了这个问题,否则从float32 到字符串的直接转换似乎会进行一种“显示”转换并截断数字
您也可以使用'display.float_format' 选项
with pd.option_context('display.float_format', '{:0.20f}'.format):
print(pd.DataFrame([34.98774564765]))
0
0 34.98774564765000150146
【讨论】: