将字符串转换为浮点数:ValueError:无法将字符串转换为浮点数:'。'

时间:2017-10-23 16:12:17

标签: python python-3.x pandas

我正在尝试将字符串转换为float,但我在标题中得到错误。我不明白为什么它不会将句点('。')识别为小数。这是我的数据框的主管。

      Country                                           Variable  \
0  Afghanistan                 Inflation, GDP deflator (annual %)   
1  Afghanistan                            GDP (constant 2010 US$)   
2  Afghanistan                                  Population, total   
3  Afghanistan                       Population ages 15-64, total   
4  Afghanistan  Employment to population ratio, 15+, total (%)...   

2007 [YR2007]     2008 [YR2008]      2009 [YR2009]     2010 [YR2010]  \
0  22.3820157780035  2.17910328500052  -2.10708255443797  9.43779477259656   
1  11721187594.2052    12144482858.18   14697331940.6464  15936800636.2487   
2          26616792          27294031           28004331          28803167   
3          13293041          13602366           13950492          14372378   
4  47.1220016479492  47.0480003356934    47.015998840332  47.0429992675781   

这是代码(Python 3.6):

growth_raw.iloc[:,3:] = growth_raw.iloc[:,3:].values.astype('float64')

我明白了:

ValueError: could not convert string to float: '.'

任何明智的想法都表示赞赏。非常感谢。

更新:我偶然转换了NAs' ..'到了'。我现在已将它们转换为''。我现在得到了

ValueError: could not convert string to float:

我试过了

growth_raw.apply(lambda x: x.str.strip())

转换时,我试过

growth_raw.iloc[:,2:].values.astype(float)

这给了我上面的错误。我也试过以下两个没有错误,但没有对数据做任何事情:

growth_raw.iloc[:,2:].apply(lambda x: pd.to_numeric(x), axis=0)
growth_raw.iloc[:,2:].apply(pd.to_numeric,errors='coerce')

2 个答案:

答案 0 :(得分:1)

使用pd.to_numeric更安全,erros ='coerce'(实际上可能存在一些不良数据),即

df.iloc[:,3:].apply(pd.to_numeric,errors='coerce')

答案 1 :(得分:0)

这个数据样本似乎没有任何问题,你转换它的方式对我来说很好。 因此导致问题的原因是数据中的其他位置。

  

我偶然转换了NAs' ..'到了'。我现在已将它们转换为''。

你为什么这样做?我无法得到它。您如何认为pandas应该将''(空字符串)转换为float。在交互模式下试用此float(''),您将收到此处报告的错误。 只需离开NaNs,看看会发生什么。

您还可以提供错误的完整追溯吗?看起来你有'。'它应该是一个数字。