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

Posted

技术标签:

【中文标题】ValueError:无法将字符串转换为浮点数:\'Mme\'【英文标题】:ValueError: could not convert string to float: 'Mme'ValueError:无法将字符串转换为浮点数:'Mme' 【发布时间】:2022-01-22 00:52:37 【问题描述】:

当我在 Jupyter Lab 中运行以下代码时

import numpy as np
from sklearn.feature_selection import SelectKBest,f_classif
import matplotlib.pyplot as plt

predictors = ["Pclass","Sex","Age","SibSp","Parch","Fare","Embarked","FamilySize","Title","NameLength"]
selector = SelectKBest(f_classif,k=5)
selector.fit(titanic[predictors],titanic["Survived"])

然后就报错了,注意ValueError: could not convert string to float: 'Mme',详情如下:

  ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    C:\Users\ADMINI~1\AppData\Local\Temp/ipykernel_17760/1637555559.py in <module>
          5 predictors = ["Pclass","Sex","Age","SibSp","Parch","Fare","Embarked","FamilySize","Title","NameLength"]
          6 selector = SelectKBest(f_classif,k=5)
    ----> 7 selector.fit(titanic[predictors],titanic["Survived"])
     ......
    
    ValueError: could not convert string to float: 'Mme'

我尝试打印titanic[predictors]titanic["Survived"],然后详细信息如下:

    Pclass  Sex Age SibSp   Parch   Fare    Embarked    FamilySize  Title   NameLength
0   3   0   22.0    1   0   7.2500  0   1   1   23
1   1   1   38.0    1   0   71.2833 1   1   3   51
2   3   1   26.0    0   0   7.9250  0   0   2   22
3   1   1   35.0    1   0   53.1000 0   1   3   44
4   3   0   35.0    0   0   8.0500  0   0   1   24
... ... ... ... ... ... ... ... ... ... ...
886 2   0   27.0    0   0   13.0000 0   0   6   21
887 1   1   19.0    0   0   30.0000 0   0   2   28
888 3   1   28.0    1   2   23.4500 0   3   2   40
889 1   0   26.0    0   0   30.0000 1   0   1   21
890 3   0   32.0    0   0   7.7500  2   0   1   19
891 rows × 10 columns

0      0
1      1
2      1
3      1
4      0
      ..
886    0
887    1
888    0
889    1
890    0
Name: Survived, Length: 891, dtype: int64

如何解决这个问题?

【问题讨论】:

【参考方案1】:

当您尝试拟合某些算法时(在您的情况下为 SelectKBest),您需要了解您的数据。而且,几乎所有时间都需要对其进行预处理。

查看您的数据:

您有分类特征还是数字特征?还是混合? 你有 NaN 值吗? ...

大多数算法不接受分类特征,您需要将其转换为数字特征(评估 OneHotEncoder 的使用)。

在您的情况下,您似乎有一个名为Mme 的分类值,它位于功能Title 中。检查一下。

NaN 值也会有同样的问题。

总之,在开始拟合之前,您必须对数据进行预处理。

【讨论】:

我输入了“titanic[predictors].dtypes”,结果显示类型不同。一种是Object,另一种是int64。【参考方案2】:

是否在第一行打印列标签? 如果是这样,那么您进行适当的数据分配,因此从第二行 array[1:,:] 开始分配数组 否则请尝试查看它并查看“Mme”字符串的位置,以便您了解代码是如何获取它的。

【讨论】:

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

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

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

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

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

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

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