我将numpy.ndarray
的浮点数存储为pandas.Datafame
的元素。我想在Jupyter Notebook中以自定义精度显示这样的 Dataframe 。
最小工作示例(Python 3.9.12):
import numpy as np
import pandas as pd
np.random.seed(12345)
df = pd.DataFrame({
'a': np.random.rand(1),
'b': np.random.rand(1),
'A': [np.random.rand(5)],
'B': [np.random.rand(5)],
'C': [np.random.rand(5)],
})
使用display(df)
会打印太多的小数位,并且不会显示整个数组:
a b A B C
0 0.929616 0.316376 [0.18391881167709445, 0.2045602785530397, 0.56... [0.6531770968715709, 0.7489066375339118, 0.653... [0.9613067360728214, 0.00838829794155349, 0.10..
使用任意精度,比如4位数,我想显示如下内容:
a b A B C
0 0.9296 0.3164 [0.1839, 0.2046, 0.5677, 0.5955, 0.9645] [0.6532, 0.7489, 0.6536, 0.7477] [0.9613, 0.008388 , 0.1064]
我试过像with pd.option_context('display.precision', 4):
和with np.printoptions(precision=4):
这样的东西,但它们似乎都没有改变数组显示的任何东西。
如何将显示精度设置为小数点后4位?
1条答案
按热度按时间iaqfqrcu1#
以下是我从跟踪所涉及的代码中学到的:Pandas调用一个名为pprint_thing()的函数,以便将numpy数组转换为字符串。它检测到numpy数组是可迭代的,并递归地调用自己。它对numpy数组的每个元素调用
str()
。由于它在数组的每个单独的float上调用str(),因此numpy的格式选项不受影响。(我不确定为什么pprint_thing()不尊重Pandas自己的格式选项--看起来这样做是有意义的。但似乎Pandas只会在格式化标量值而不是数组时才会注意这些选项。因此,我不相信这是可能的,除非你自己格式化这个列。
有一个解决方法,那就是自己做字符串转换: