ValueError: could not convert string to float: 'Mme'
ValueError: could not convert string to float: 'Mme'
当我在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:,:] 开始分配数组
否则尝试查看它并查看“Mme”字符串位于何处,以便您了解代码是如何获取它的。
当您尝试拟合某些算法时(在您的情况下 SelectKBest
),您需要了解您的数据。而且,几乎所有时间都需要对其进行预处理。
查看您的数据:
- 你有分类特征还是数字特征?还是混合?
- 你有 NaN 值吗?
- ...
大多数算法不接受分类特征,你需要转换成数字特征(评估OneHotEncoder
的使用)。
在您的情况下,您似乎有一个名为 Mme
的分类值,它位于特征 Title
中。检查一下。
您将遇到与 NaN 值相同的问题。
总之,在开始拟合之前,您必须对数据进行预处理。
当我在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:,:] 开始分配数组 否则尝试查看它并查看“Mme”字符串位于何处,以便您了解代码是如何获取它的。
当您尝试拟合某些算法时(在您的情况下 SelectKBest
),您需要了解您的数据。而且,几乎所有时间都需要对其进行预处理。
查看您的数据:
- 你有分类特征还是数字特征?还是混合?
- 你有 NaN 值吗?
- ...
大多数算法不接受分类特征,你需要转换成数字特征(评估OneHotEncoder
的使用)。
在您的情况下,您似乎有一个名为 Mme
的分类值,它位于特征 Title
中。检查一下。
您将遇到与 NaN 值相同的问题。
总之,在开始拟合之前,您必须对数据进行预处理。