将 nan 转换为数字

conversion of nan to numeric

energy[['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']] = energy[['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']].replace('...',np.NaN).apply(pd.to_numeric)

报错

Traceback (most recent call last)
pandas/src/inference.pyx in pandas.lib.maybe_convert_numeric (pandas/lib.c:55708)()

ValueError: Unable to parse string "Afghanistan"

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-4-d0b55a0e8afa> in <module>()
      5 energy=energy[['Unnamed: 1','Petajoules','Gigajoules','%']]
      6 energy.columns=['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']
----> 7 energy[['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']]=energy[['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']].replace('...',np.NaN).apply(pd.to_numeric)
      8 energy['Energy Supply']=energy['Energy Supply']*1,000,000
      9 energy

/opt/conda/lib/python3.6/site-packages/pandas/core/frame.py in apply(self, func, axis, broadcast, raw, reduce, args, **kwds)
   4150                     if reduce is None:
   4151                         reduce = True
-> 4152                     return self._apply_standard(f, axis, reduce=reduce)
   4153             else:
   4154                 return self._apply_broadcast(f, axis)

/opt/conda/lib/python3.6/site-packages/pandas/core/frame.py in _apply_standard(self, func, axis, ignore_failures, reduce)
   4246             try:
   4247                 for i, v in enumerate(series_gen):
-> 4248                     results[i] = func(v)
   4249                     keys.append(v.name)
   4250             except Exception as e:

/opt/conda/lib/python3.6/site-packages/pandas/tools/util.py in to_numeric(arg, errors, downcast)
    193             coerce_numeric = False if errors in ('ignore', 'raise') else True
    194             values = lib.maybe_convert_numeric(values, set(),
--> 195                                                coerce_numeric=coerce_numeric)
    196 
    197     except Exception:

pandas/src/inference.pyx in pandas.lib.maybe_convert_numeric (pandas/lib.c:56097)()

ValueError: ('Unable to parse string "Afghanistan" at position 0', 'occurred at index Country')

是的,这绝对是一个错误。

说真的,考虑问一个问题,说出你想做什么或你需要知道什么来实现你正在尝试的。

如果问题是“如何让我的列表能量只有数字”,你可以试试这个:

for i in range(len(energy)): 
    if not isinstance(energy[i], (int, float, complex)):
        energy[i] = 0  

不客气。

这是因为您正在尝试将字符串转换为数字 'Country'' 列显然可能包含字符串。尝试不使用 'Country'

energy[['Energy Supply', 'Energy Supply per Capita', '% Renewable']] =  energy[['Energy Supply', 'Energy Supply per Capita', '% Renewable']].replace('...',np.NaN).apply(pd.to_numeric)