Python .apply(pd.to_numeric)返回错误消息

Python .apply(pd.to_numeric)返回错误消息,python,Python,我有一个带有两列的数据框,我想转换成数字类型。我使用以下代码: df[["GP","G"]]=df[["GP","G"]].apply(pd.to_numeric) Python返回以下错误消息: File "C:\Users\Alexandros_7\Anaconda3\lib\site-packages\pandas\core\frame.py", line 4157, in _apply_standard results[i] = func(v) File "C:\Users\Alex

我有一个带有两列的数据框,我想转换成数字类型。我使用以下代码:

df[["GP","G"]]=df[["GP","G"]].apply(pd.to_numeric)
Python返回以下错误消息:

File "C:\Users\Alexandros_7\Anaconda3\lib\site-packages\pandas\core\frame.py", line 4157, in _apply_standard
results[i] = func(v)

File "C:\Users\Alexandros_7\Anaconda3\lib\site-packages\pandas\tools\util.py", line 115, in to_numeric
coerce_numeric=coerce_numeric)

File "pandas\src\inference.pyx", line 612, in pandas.lib.maybe_convert_numeric (pandas\lib.c:53558)

File "pandas\src\inference.pyx", line 598, in      pandas.lib.maybe_convert_numeric (pandas\lib.c:53344)

ValueError: ('Unable to parse string', 'occurred at index GP')

我如何解决这个问题?如何使用命令一次转换多个列类型?谢谢大家!

只有当所有数据都可以解析为数字时,代码才会工作

如果不是,则dataframe中至少有一个值不能转换为数值。在这种情况下,您可以根据自己的选择使用errors参数。这里有一个例子

>>> df = pd.DataFrame({'A' : list('aabbcd'), 'B' : list('ffghhe')})

>>> df
   A  B
0  a  f
1  a  f
2  b  g
3  b  h
4  c  h
5  d  e

>>> df.apply(pd.to_numeric, errors='ignore')
   A  B
0  a  f
1  a  f
2  b  g
3  b  h
4  c  h
5  d  e

>>> df.apply(pd.to_numeric, errors='coerce')
    A   B
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN

>>> df.apply(pd.to_numeric, errors='raise')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4042, in apply
    return self._apply_standard(f, axis, reduce=reduce)
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4138, in _apply_standard
    results[i] = func(v)
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4020, in f
    return func(x, *args, **kwds)
  File "/usr/local/lib/python2.7/dist-packages/pandas/tools/util.py", line 98, in to_numeric
    coerce_numeric=coerce_numeric)
  File "pandas/src/inference.pyx", line 612, in pandas.lib.maybe_convert_numeric (pandas/lib.c:53932)
  File "pandas/src/inference.pyx", line 598, in pandas.lib.maybe_convert_numeric (pandas/lib.c:53719)
ValueError: ('Unable to parse string', u'occurred at index A')
>>> 
以下是错误的文档

错误:{'ignore','raise','concurve',},默认值为'raise'

如果为“raise”,则无效解析将引发异常

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

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


只有当所有数据都可以解析为数字时,代码才能工作

如果不是,则dataframe中至少有一个值不能转换为数值。在这种情况下,您可以根据自己的选择使用errors参数。这里有一个例子

>>> df = pd.DataFrame({'A' : list('aabbcd'), 'B' : list('ffghhe')})

>>> df
   A  B
0  a  f
1  a  f
2  b  g
3  b  h
4  c  h
5  d  e

>>> df.apply(pd.to_numeric, errors='ignore')
   A  B
0  a  f
1  a  f
2  b  g
3  b  h
4  c  h
5  d  e

>>> df.apply(pd.to_numeric, errors='coerce')
    A   B
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN

>>> df.apply(pd.to_numeric, errors='raise')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4042, in apply
    return self._apply_standard(f, axis, reduce=reduce)
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4138, in _apply_standard
    results[i] = func(v)
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4020, in f
    return func(x, *args, **kwds)
  File "/usr/local/lib/python2.7/dist-packages/pandas/tools/util.py", line 98, in to_numeric
    coerce_numeric=coerce_numeric)
  File "pandas/src/inference.pyx", line 612, in pandas.lib.maybe_convert_numeric (pandas/lib.c:53932)
  File "pandas/src/inference.pyx", line 598, in pandas.lib.maybe_convert_numeric (pandas/lib.c:53719)
ValueError: ('Unable to parse string', u'occurred at index A')
>>> 
以下是错误的文档

错误:{'ignore','raise','concurve',},默认值为'raise'

如果为“raise”,则无效解析将引发异常

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

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


我对投票失败表示歉意。这个lambda是多余的,它的缺失不是问题的原因。您能详细说明一下吗?我不明白。λx:funcx和func完全一样。特别是,您可以通过其中一项申请。再一次,很抱歉对答案投了否决票。好的。我仍然认为lambda在这里是多余的,但它也不会造成太大的伤害。祝你一切顺利,我为这次落选道歉。这个lambda是多余的,它的缺失不是问题的原因。您能详细说明一下吗?我不明白。λx:funcx和func完全一样。特别是,您可以通过其中一项申请。再一次,很抱歉对答案投了否决票。好的。我仍然认为lambda在这里是多余的,但它也不会造成太大的伤害。最好的。您的数据框包含一些无法转换为数值的条目,例如df=pd。数据框{'GP':['a'],'g':['2']}。您的数据框包含一些无法转换为数值的条目,例如df=pd。数据框{'GP':['a'],'g':['2']}。