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]))
这将在数据框中为您提供两个新列,每个列都包含字符串中的浮点值。
我将基于我拥有的 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]))
这将在数据框中为您提供两个新列,每个列都包含字符串中的浮点值。