ValueError:无法将字符串转换为浮点数:'62,6'

Posted

技术标签:

【中文标题】ValueError:无法将字符串转换为浮点数:\'62,6\'【英文标题】:ValueError: could not convert string to float: '62,6'ValueError:无法将字符串转换为浮点数:'62,6' 【发布时间】:2018-02-27 03:48:16 【问题描述】:

我正在尝试将数据帧转换为 numpy 数组:

dataset = myset.values
X = np.array(dataset[0:,6:68], dtype="float32")
X[0:5,0:]

Here is a piece of the data

这是一个错误:

-----------------------------------------------------------------------

----
ValueError                                Traceback (most recent call last)
<ipython-input-162-4b67608047d1> in <module>()
      1 dataset = myset.values
----> 2 X = np.array(dataset[0:,6:68], dtype="float32")
      3 X[0:5,0:]

ValueError: could not convert string to float: '62,6'

哪里出了问题?

【问题讨论】:

, 不是有效的小数分隔符。您要么在数据集加载器中使用decimal=',',要么将',' 替换为'.',然后解析为浮点数。 【参考方案1】:

在 Python(或基本上今天使用的任何编程语言)中,点 (.) 用于小数点,而不是逗号 (,),因此您应该将字符串中的逗号替换为点。重新处理。

【讨论】:

【参考方案2】:

尝试使用replace ,.

dataset = myset.replace(',','.', regex=True).values

或使用read_csv 中的参数decimal, 转换为浮点数中的.

dataset = pd.read_csv('file', decimal=',')

【讨论】:

【参考方案3】:

有些语言环境使用 '.'作为小数分隔符和 ',' 作为千位分隔符。 也有使用 ',' 作为小数分隔符和 '.' 的语言环境。作为千位分隔符。

做一个简单的字符串替换会给你带来各种各样的麻烦。你需要

import locale

然后指定您要使用的语言环境,例如

locale.setlocale(locale.LC_NUMERIC, 'german')

然后你可以使用解析字符串

locale.atof('1.337,3')

【讨论】:

在 Ubuntu 上,这应该是 locale.setlocale(locale.LC_NUMERIC, 'de_DE.utf8')

以上是关于ValueError:无法将字符串转换为浮点数:'62,6'的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:无法将字符串转换为浮点数:'2100 - 2850'

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

ValueError:无法将字符串转换为浮点数:'62,6'

ValueError:无法将字符串转换为浮点数:''20,99''

我收到 ValueError:无法将字符串转换为浮点数:'8,900' [重复]

ValueError:无法将字符串转换为浮点数:'31,950'