【问题标题】:Pandas dataframe. Why data displayed is different from the stored one?熊猫数据框。为什么显示的数据与存储的数据不同?
【发布时间】:2021-05-02 15:29:58
【问题描述】:

将“pivot_table”应用于df,我得到一个平均值。

df_mean=df.pivot_table(index=['col_1']).sort_index(axis=1, level=1)

当我显示结果数据框的 WIND 列时

df_mean.WIND
Out[418]: 
col_1
P1              76.450000
P2              75.200000
P3              83.680000
P4              84.221429
P5              67.875000
Name: WIND, dtype: float64

当我直接访问元素时为什么会有所不同?

df_mean.WIND[0]
Out[419]: 76.44999999999999

我想四舍五入(小数点后一位),我希望得到 76.5...

一直在找答案,可能和这个有关?:

import statistics
df_calculo = pd.DataFrame({"A":[80.8,76.3,78.6,77.1,69.4,67.7,72.4,89.3]})
df_calculo.dtypes 
uu=statistics.mean(df_calculo["A"])
print(uu)#Is EXACT

uu2=df_calculo["A"].mean()
uu2#Is NOT exact

结果:

uu= 76.45
uu2= 76.44999999999999

【问题讨论】:

  • 我假设 df_mean.WIND 真的是 df_mean.VIENTO 并且两者的所有出现都是相同的?
  • 我已经正确改写了

标签: pandas dataframe statistics mean


【解决方案1】:

Pandas 的默认显示精度为小数点后 6 位。它只是显示四舍五入。使用np.mean() 作为默认agg_function 计算实际值。所以它与这里使用的均值类型有关。

Pandas Docs on options:见“display.precision”

以小数点后位数表示的浮点输出精度,适用于常规格式和科学记数法。类似于 numpy 的精确打印选项

还有Docs on pivot_table:见“agg_function”

【讨论】:

  • 好的,但是虽然这不是主要问题(在上下文中我想要一个精确的意思),但为什么 uu 是精确的而 uu2 不是?如果我想最终得到 76.45,我可以:在执行 mean() 之前更改为“十进制”,或者似乎 statistics.mean 不需要之前的十进制转换即可获得准确的结果。
  • 正确。如果您必须得到准确的结果,这些是您的选择。要么改变 agg_function 要么改变输入
猜你喜欢
  • 2018-03-20
  • 2018-07-15
  • 2018-02-16
  • 1970-01-01
  • 2019-05-07
  • 2021-05-06
  • 1970-01-01
  • 2021-11-21
  • 2019-01-03
相关资源
最近更新 更多