我使用的是python 3.7和pandas 0.24.2
设置:
s = pd.Series(['10', '12', '15', '20', 'A', '31', 'C', 'D'])
In [36]: s
Out[36]:
0 10
1 12
2 15
3 20
4 A
5 31
6 C
7 D
dtype: object
to_numeric with errors='coerce'
pd.to_numeric(s, errors='coerce')
Out[37]:
0 10.0
1 12.0
2 15.0
3 20.0
4 NaN
5 31.0
6 NaN
7 NaN
dtype: float64
to_numeric与errors=''
(空字符串)
pd.to_numeric(s, errors='')
Out[38]:
0 10.0
1 12.0
2 15.0
3 20.0
4 NaN
5 31.0
6 NaN
7 NaN
dtype: float64
to_numeric与errors='ljljalklag'
。即随机字符串
pd.to_numeric(s, errors='ljljalklag')
Out[39]:
0 10.0
1 12.0
2 15.0
3 20.0
4 NaN
5 31.0
6 NaN
7 NaN
dtype: float64
换句话说,将除字符串raise
,ignore
以外的任何字符串传递给errors
的{{1}}参数,等同于pd.to_numeric
。
这是功能还是错误?
答案 0 :(得分:5)
AFAIK,鉴于源代码,这是预期的行为:
# pandas/core/tools/numeric.py
...
coerce_numeric = errors not in ("ignore", "raise") # line 147
...
因此,它仅检查errors
是raise
还是ignore
,否则是coerce
作为默认值。
答案 1 :(得分:2)
此问题已在0.25.0版中修复,以验证errors
关键字(请参见#26394)。
0.25.0中的新行为:
In [1]: import pandas as pd; pd.__version__
Out[1]: '0.25.0'
In [2]: pd.to_numeric([1, 'a', 2.2], errors='foo')
---------------------------------------------------------------------------
ValueError: invalid error value specified
0.24.2中的先前行为:
In [1]: import pandas as pd; pd.__version__
Out[1]: '0.24.2'
In [2]: pd.to_numeric([1, 'a', 2.2], errors='foo')
Out[2]: array([1. , nan, 2.2])