gpt4 book ai didi

python - 接近 0.05 的舍入从结果中删除一位

转载 作者:行者123 更新时间:2023-12-03 21:12:33 29 4
gpt4 key购买 nike

我有两列带有数字数据的 Pandas 表(dtype flaot64)。
我将每列四舍五入到小数点后有 2 位数字,然后使用函数将其四舍五入到接近 0.5,但由于某种原因,只有一列四舍五入为 0.05,第二列四舍五入但错过了第二位数字。
这是一个假的例子,它可以工作并显示流程:

table=pd.DataFrame({'A': [0.62435, 0.542345,0.213452],
'B': [0.22426,0.15779,0.30346]})

#function for round to near 0.5:
def custom_round(x, base=5):
return base * round(float(x)/base)

table['A'] = table['A'].astype(float).round(2).apply(lambda x: custom_round(x, base=.05))
table['B'] = table['B'].astype(float).round(2).apply(lambda x: custom_round(x, base=.05))
table

>>>

A B
0 0.60 0.20
1 0.55 0.15
2 0.20 0.30
但在我的 table 上,我最终得到了:
enter image description here
当我在没有函数的情况下运行脚本接近 0.5 时,我仍然得到两位数:
table['B'] = table['B'].round(2)
enter image description here
我的问题是为什么会这样?以及如何修复它以便将两列四舍五入为 0.05 并显示两个数字?
编辑:有人问我如何将它应用到我的真实 table 上,所以:
df['A'] = df['A'].astype(float).round(2).apply(lambda x: custom_round(x, base=.05))
df['B']= df['B'].round(2).apply(lambda x: custom_round(x, base=.05))

最佳答案

您的数字四舍五入正确。下面我来解释一下,

  • 如何显示 2 位精度?
  • 示例数据发生了什么?

  • 1.如何显示2位精度?
    如果您真的只想显示两位数字,则可以完全跳过舍入函数( custom_round ),只需在打印数据帧之前运行此*:
    pd.options.display.float_format = '{:,.2f}'.format
    这将使浮点值数据以 2 位精度打印。例子:
    table=pd.DataFrame({'A': [0.62435, 0.542345,0.213452],
    'B': [0.22426,0.18779,0.30346]})
    In [1]: table
    Out[1]:
    A B
    0 0.62 0.22
    1 0.54 0.19
    2 0.21 0.30
    2. 示例数据发生了什么?
  • 使用与问题
  • 中给出的相同的数据

    table=pd.DataFrame({'A': [0.62435, 0.542345,0.213452],
    'B': [0.22426,0.15779,0.30346]})

    # execute code with custom_round in the question

    In [1]: table
    Out[1]:
    A B
    0 0.60 0.20
    1 0.55 0.15
    2 0.20 0.30
  • 将 B 的中间值设置为 0.18779(四舍五入为 0.20)

  • table=pd.DataFrame({'A': [0.62435, 0.542345,0.213452],
    'B': [0.22426,0.18779,0.30346]})

    # execute code with custom_round in the question

    In [1]: table
    Out[1]:
    A B
    0 0.60 0.2
    1 0.55 0.2
    2 0.20 0.3
    为什么会发生这种情况?
    在内部,该数字四舍五入为两位数精度。当您将表格打印到控制台/Jupyter 笔记本时, pandas 会跳过最后一个值(第 2 位)的打印(如果它们都是零)。 因此,数据是两位数的精度(例如,0.20),但 只是以一位数的精度 显示,因为 0.20 = 0.2。

    * 您也可以使用其他打印方案: pd.options.display.float_format 可以设置为任何可调用的

    [...] accept a floating point number and return a stringwith the desired format of the number. This is used in some placeslike SeriesFormatter. See core.format.EngFormatter for an example.

    关于python - 接近 0.05 的舍入从结果中删除一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62810769/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com