如何为包含numpy.ndarray的pandas.Datafame设置显示精度?

py49o6xq  于 2023-05-21  发布在  其他
关注(0)|答案(1)|浏览(71)

我将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位?

iaqfqrcu

iaqfqrcu1#

以下是我从跟踪所涉及的代码中学到的:Pandas调用一个名为pprint_thing()的函数,以便将numpy数组转换为字符串。它检测到numpy数组是可迭代的,并递归地调用自己。它对numpy数组的每个元素调用str()。由于它在数组的每个单独的float上调用str(),因此numpy的格式选项不受影响。(我不确定为什么pprint_thing()不尊重Pandas自己的格式选项--看起来这样做是有意义的。但似乎Pandas只会在格式化标量值而不是数组时才会注意这些选项。
因此,我不相信这是可能的,除非你自己格式化这个列。
有一个解决方法,那就是自己做字符串转换:

import numpy as np
import pandas as pd

np.random.seed(12345)
np.set_printoptions(precision=4)

df = pd.DataFrame({
  'A': [np.random.rand(5)],
})
df['A'] = df['A'].apply(str)
print(df)

相关问题