我看到有人问过类似的问题,但看起来不是由同一个问题引起的。这是我给出错误的代码:
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neighbors import KNeighborsRegressor
from io import StringIO
d = pd.read_csv("http://www.stat.wisc.edu/~jgillett/451/data/kaggle_titanic_train.csv")
data =d[['Survived','Pclass','Sex','Age','SibSp','Parch']]
#print(data.head(n=7))
y = data.Survived
X = data[['Pclass','Sex','Age','SibSp','Parch']]
k = 3
knn = KNeighborsClassifier(n_neighbors=k, weights='distance', metric='euclidean')
knn.fit(X, y)
所以我试着像这样把它转换成浮点数:
data.Sex=data[['Sex']].astype(float)
但这只会给出完全相同的错误。为什么不能将字符串转换为浮点数?
您可以使用
replace
或pd.factorize
:
data['Sex'] = data['Sex'].replace({'male': 0, 'female': 1})
# OR
data['Sex'] = pd.factorize(data['Sex'])[0]
输出:
>>> data
Survived Pclass Sex Age SibSp Parch
0 0 3 0 22.0 1 0
1 1 1 1 38.0 1 0
2 1 3 1 26.0 0 0
3 1 1 1 35.0 1 0
4 0 3 0 35.0 0 0
.. ... ... ... ... ... ...
886 0 2 0 27.0 0 0
887 1 1 1 19.0 0 0
888 0 3 1 NaN 1 2
889 1 1 0 26.0 0 0
890 0 3 0 32.0 0 0
[891 rows x 6 columns]
我是 python 的初学者,但我很确定 str() 中的字符串不能像 float() 中那样转换为浮点数,而且它不太合逻辑。尝试将其更改为整数,如 int()。 希望我有帮助 :D