我正在尝试将字符串转换为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')
答案 0 :(得分:1)
使用pd.to_numeric更安全,erros ='coerce'(实际上可能存在一些不良数据),即
df.iloc[:,3:].apply(pd.to_numeric,errors='coerce')
答案 1 :(得分:0)
这个数据样本似乎没有任何问题,你转换它的方式对我来说很好。 因此导致问题的原因是数据中的其他位置。
我偶然转换了NAs' ..'到了'。我现在已将它们转换为''。
你为什么这样做?我无法得到它。您如何认为pandas应该将''
(空字符串)转换为float。在交互模式下试用此float('')
,您将收到此处报告的错误。
只需离开NaNs
,看看会发生什么。
您还可以提供错误的完整追溯吗?看起来你有'。'它应该是一个数字。