gpt4 book ai didi

python - Python Pandas 中的系列选择

转载 作者:行者123 更新时间:2023-12-01 05:03:52 24 4
gpt4 key购买 nike

我正在使用 Pandas Series 来选择系列的行。但是,我遇到了以下问题:

>>> q=pandas.Series([0.5,0.5,0,1,0.5,0.5])
>>> q
0 0.5
1 0.5
2 0.0
3 1.0
4 0.5
5 0.5
dtype: float64

>>> (q-0.3).abs()
0 0.2
1 0.2
2 0.3
3 0.7
4 0.2
5 0.2
dtype: float64

>>> (q-0.7).abs()
0 0.2
1 0.2
2 0.7
3 0.3
4 0.2
5 0.2
dtype: float64

>>> (q-0.3).abs() > (q-0.7).abs() # This is I expected:
0 True # False
1 True # False
2 False # False
3 True # True
4 True # False
5 True # False
dtype: bool

>>> (q-0.3).abs() == (q-0.7).abs()
0 False
1 False
2 False
3 False
4 False
5 False
dtype: bool

显然,“0.2”不大于“0.2”……

为什么输出与我期望的不同?

最佳答案

这是一个浮点问题。 this 中对此进行了很好的描述。问题。

要直接回答您的问题,请查看两个测试的第一个元素。你们的值(value)观不平等。

>>> (q-0.7).abs()[1]
0.19999999999999996
>>> (q-0.3).abs()[1]
0.20000000000000001

不过,我们可以通过一些操作并利用 decimal 来获得您的结果。模块。

>>> from decimal import Decimal, getcontext
>>> import pandas
>>> s = [0.5,0.5,0,1,0.5,0.5]
>>> dec_s = [Decimal(x) for x in s]
>>> q = pandas.Series(dec_s)
>>> q
0 0.5
1 0.5
2 0
3 1
4 0.5
5 0.5
dtype: object
>>> getcontext().prec
28
>>> getcontext().prec = 2
>>> (q-Decimal(0.3)).abs() > (q-Decimal(0.7)).abs()
0 False
1 False
2 False
3 True
4 False
5 False
dtype: bool

需要注意的几点:

  • 在添加到系列之前,值列表会从float 转换为decimal 数据类型。
  • dtype 现在是一个对象,而不是float64。这是因为 numpy 不直接处理 Decimal 类型。
  • 小数类型的默认精度为小数点后 28 位。我把它削减到 2。通常十进制模块可以自动处理这个问题,但是通过 numpy 交互(我假设),它会变得困惑,我们最终会得到像数字一样的大 float 。较小的精度与您的数据集匹配。
  • 比较中使用的 0.30.7 值也必须是小数,否则您将看到类似于 + 不支持的操作数类型的错误:“十进制”和“ float ”

关于python - Python Pandas 中的系列选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25457999/

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