Python 错误:无法将字符串转换为浮点数:'male'

问题描述 投票:0回答:2

我看到有人问过类似的问题,但看起来不是由同一个问题引起的。这是我给出错误的代码:

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)

但这只会给出完全相同的错误。为什么不能将字符串转换为浮点数?

python pandas jupyter-notebook knn
2个回答
1
投票

您可以使用

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]

0
投票

我是 python 的初学者,但我很确定 str() 中的字符串不能像 float() 中那样转换为浮点数,而且它不太合逻辑。尝试将其更改为整数,如 int()。 希望我有帮助 :D

© www.soinside.com 2019 - 2024. All rights reserved.