pandas.to_numeric #

熊猫。to_numeric ( arg ,错误= 'raise' , downcast = None , dtype_backend = _NoDefault.no_default ) [来源] #

将参数转换为数字类型。

默认返回 dtype 是float64int64 ,具体取决于提供的数据。使用downcast参数获取其他数据类型。

请注意,如果传入的数字非常大,则可能会出现精度损失。由于ndarray的内部限制,如果数字小于-9223372036854775808 (np.iinfo(np.int64).min) 或大于18446744073709551615 (np.iinfo( np.uint64).max) 被传入,它们很可能会被转换为 float,以便它们可以存储在ndarray中。这些警告与Series类似, 因为它内部利用了ndarray

参数
arg标量、列表、元组、一维数组或系列

要转换的参数。

错误{'ignore', 'raise', 'coerce'}, 默认 'raise'
  • 如果“引发”,则无效解析将引发异常。

  • 如果“强制”,则无效解析将被设置为 NaN。

  • 如果“忽略”,则无效解析将返回输入。

2.2 版本更改。

“忽略”已被弃用。相反,显式捕获异常。

向下转型str,默认 None

可以是“整数”、“有符号”、“无符号”或“浮点”。如果不是 None,并且数据已成功转换为数字 dtype(或者如果数据一开始就是数字),则根据以下规则将结果数据向下转换为可能的最小数字 dtype:

  • 'integer' 或 'signed':最小的有符号 int 数据类型(最小值:np.int8)

  • 'unsigned':最小的无符号 int 数据类型(最小值:np.uint8)

  • 'float':最小的浮点数据类型(最小值:np.float32)

由于此行为与到数值的核心转换是分开的,因此无论“错误”输入的值如何,在向下转换期间引发的任何错误都将浮出水面。

此外,只有当结果数据的数据类型的大小严格大于要转换为的数据类型时,才会发生向下转换,因此如果检查的数据类型都不满足该规范,则不会对数据执行向下转换。

dtype_backend {'numpy_nullable', 'pyarrow'}, 默认 'numpy_nullable'

应用于结果的后端数据类型DataFrame (仍处于试验阶段)。行为如下:

  • "numpy_nullable":返回 nullable-dtype-backed DataFrame (默认)。

  • "pyarrow":返回 pyarrow 支持的可为空的ArrowDtype DataFrame。

2.0版本中的新增内容。

返回
雷特

如果解析成功,则为数字。返回类型取决于输入。如果是系列则为系列,否则为 ndarray。

也可以看看

DataFrame.astype

将参数转换为指定的数据类型。

to_datetime

将参数转换为日期时间。

to_timedelta

将参数转换为 timedelta。

numpy.ndarray.astype

将 numpy 数组转换为指定类型。

DataFrame.convert_dtypes

转换数据类型。

例子

采取单独的系列并转换为数字,当被告知时进行强制

>>> s = pd.Series(['1.0', '2', -3])
>>> pd.to_numeric(s)
0    1.0
1    2.0
2   -3.0
dtype: float64
>>> pd.to_numeric(s, downcast='float')
0    1.0
1    2.0
2   -3.0
dtype: float32
>>> pd.to_numeric(s, downcast='signed')
0    1
1    2
2   -3
dtype: int8
>>> s = pd.Series(['apple', '1.0', '2', -3])
>>> pd.to_numeric(s, errors='coerce')
0    NaN
1    1.0
2    2.0
3   -3.0
dtype: float64

支持可为空整数和浮点数据类型的向下转换:

>>> s = pd.Series([1, 2, 3], dtype="Int64")
>>> pd.to_numeric(s, downcast="integer")
0    1
1    2
2    3
dtype: Int8
>>> s = pd.Series([1.0, 2.1, 3.0], dtype="Float64")
>>> pd.to_numeric(s, downcast="float")
0    1.0
1    2.1
2    3.0
dtype: Float32