gpt4 book ai didi

python - 为什么 pd.to_numeric 不适用于大数字?

转载 作者:太空宇宙 更新时间:2023-11-03 13:26:47 26 4
gpt4 key购买 nike

假设我在一个字符串中有一个很大的数字,比如 '555555555555555555555'。可以选择将其转换为 int、float 甚至 numpy float:

int('555555555555555555555')
float('555555555555555555555')
np.float('555555555555555555555')

但是,当我使用 pandas 函数 pd.to_numeric 时,出现了问题:

pd.to_numeric('555555555555555555555')

错误:

Traceback (most recent call last):
File "pandas/_libs/src/inference.pyx", line 1173, in pandas._libs.lib.maybe_convert_numeric
ValueError: Integer out of range.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\path_to_conda\lib\site-packages\IPython\core\interactiveshell.py", line 3267, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-34-6a735441ab7b>", line 1, in <module>
pd.to_numeric('555555555555555555555')
File "C:\path_to_conda\lib\site-packages\pandas\core\tools\numeric.py", line 133, in to_numeric
coerce_numeric=coerce_numeric)
File "pandas/_libs/src/inference.pyx", line 1185, in pandas._libs.lib.maybe_convert_numeric
ValueError: Integer out of range. at position 0

怎么了?为什么 pandas to_numeric 不能处理更大的值?是否有任何用例说明您会使用 pd.to_numeric 而不是 np.float 之类的函数?

最佳答案

因为您的数字大于系统能够保存的整数的最大大小:

In [4]: import sys

In [5]: sys.maxsize
Out[5]: 9223372036854775807

In [6]: 555555555555555555555 > sys.maxsize
Out[6]: True

这是 the source code 的一部分引发 ValueError:

if not (seen.float_ or as_int in na_values):
if as_int < oINT64_MIN or as_int > oUINT64_MAX:
raise ValueError('Integer out of range.')

如您所见,因为您的数字不是 float ,所以它会将其视为整数并检查该数字是否在正确的范围内 oINT64_MIN, oUINT64_MAX。如果你传递了一个 float ,它会给你正确的结果:

In [9]: pd.to_numeric('555555555555555555555.0')
Out[9]: 5.5555555555555554e+20

关于python - 为什么 pd.to_numeric 不适用于大数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54019441/

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