【问题标题】:How to fix "ValueError: could not convert string to float"如何修复“ValueError:无法将字符串转换为浮点数”
【发布时间】:2021-06-21 11:21:57
【问题描述】:

我将根据我拥有的 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 数据帧中,传感器的位置以节点坐标的形式表示。 Y系列如下图:

y:

0
0
0

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

【问题讨论】:

  • 您的坐标是字符串,但 SVM 需要将它们转换为浮点数。您需要在数据框中将坐标分成 2 列。

标签: python dataframe svm


【解决方案1】:

'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]))

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

【讨论】:

    【解决方案2】:

    我假设您正在尝试将整个字符串“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) 方法可以轻松地将两者转换为浮点数,从而获得两个单独的浮点数。

    这是一个了解字符串切片的有用链接:https://www.geeksforgeeks.org/string-slicing-in-python/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 2019-03-23
      • 2018-06-13
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多