为什么pd.to_numeric不能用于大数?

圭多

假设我的字符串中有很多数字,例如'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

怎么了 为什么熊猫不能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

这是引发以下内容的部分源代码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.')

如您所见,由于您的数字不是浮点数,因此将其视为整数,并检查数字是否在适当范围内oINT64_MIN, oUINT64_MAX如果您传递的是浮点数,则可以得到正确的结果:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么OptionT不能用于Try?

ngInfiniteScroll为什么不能用于表格?

为什么 basename 不能用于变量?

为什么不能使用_mm_sin_pd?

为什么范围不能用于管道库功能?

为什么浮点数提升也不能用于算术?

为什么 Java 泛型不能用于静态方法?

为什么:hover不能用于tr元素?

为什么该复选框不能用于导航?

为什么constexpr成员不能用于static_assert?

为什么hasNextInt()方法不能用于大整数?

为什么此代码不能用于大量数字?

为什么Pattern属性不能用于type =“ date”?

为什么我的函数不能用于无限列表?

为什么背景图片不能用于输入?

输入文件的accept属性不能用于.pdf,为什么?

为什么let命令不能用于添加实数?

为什么颜色不能用于stdscr?(PDCurses)

为什么 queryselectorAll 不能用于删除元素?

为什么懒惰的吸气剂只能用于原型,而不能用于类?

为什么对泛型方法的这种覆盖只能用于1.6,而不能用于1.7?

为什么返回呼叫者只能用于“列表”,而不能用于“地图”?

为什么pd.to_numeric`errors ='`等同于`errors ='coerce'`

为什么代码不能用于malloc但可以用于非动态分配?

为什么节点shebang可用于Angular CLI但不能用于我的文件?

为什么重复一个pd.series不能按预期工作?

为什么我的保证金不能用于仓位:固定?

为什么IFS的分隔符不能用于数组扩展?

为什么`boost :: multi_index replace`不能用于指针类型?