How to fix "ValueError: could not convert string to float"

How to fix "ValueError: could not convert string to float"

我将基于我拥有的 x 数据帧和 y 系列来训练 SVM。 X数据框如下所示:

x:

Timestamp      Location of sensors       Pressure or Flow values

0.00000         138.22, 1549.64            28.92

0.08333         138.22, 1549.64            28.94

0.16667         138.22, 1549.64            28.96

在X dataframe中,传感器的位置以节点坐标的形式表示。 Y系列如下图:

y:

0
0
0

但是当我将 svm 拟合到训练集时,它返回了一个 ValueError:could not convert string to float: '361.51,1100.77' 和 (361.51, 1100.77) 是一个节点的坐标。 你能给我一些解决这个问题的想法吗? 如有指教,不胜感激

我假设您正在尝试将整个字符串“361.51,1100.77”转换为浮点数,您会明白为什么这是个问题,因为 Python 看到两个小数点和一个逗号,所以它不知道该怎么做。 假设您希望数字分开,您可以这样做:

myStr = "361.51,1100.77"
x = float(myStr[0:myStr.index(",")])
y = float(myStr[myStr.index(",")+1:])
print(x)
print(y)

这将使您得到

的输出
361.51
1100.77

将 x 赋值为 myStr[0:myStr.index(",")] 取原始字符串的子字符串,从 1 到第一次出现的逗号,得到第一个数字。

将 y 指定为 myStr[myStr.index(",")+1:] 获取原始字符串的子字符串,从第一个逗号之后开始到字符串结尾,得到第二个数字。

两者都可以使用 float(myStr) 方法从此处轻松转换为浮点数,从而获得两个独立的浮点数。

这里有一个有用的 link 来理解字符串切片:https://www.geeksforgeeks.org/string-slicing-in-python/

'361.51,1100.77'其实是两个数字吧?纬度 (361.51) 和经度 (1100.77)。您首先需要将其拆分为两个字符串。这是一种方法:

data = pd.DataFrame(data=[[0, "138.22,1549.64", 28.92]], columns=["Timestamp", "coordinate", "flow"])

data["latitude"] = data["coordinate"].apply(lambda x: float(x.split(",")[0]))
data["longitude"] = data["coordinate"].apply(lambda x: float(x.split(",")[1]))

这将在数据框中为您提供两个新列,每个列都包含字符串中的浮点值。