python - 无法将性别数据更改为二进制值
问题描述
我正在参加泰坦尼克号比赛。到目前为止,这是我的代码:
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
train = pd.read_csv("https://raw.githubusercontent.com/oo92/Titanic-Kaggle/master/train.csv")
test = pd.read_csv("https://raw.githubusercontent.com/oo92/Titanic-Kaggle/master/test.csv")
train['Sex'].replace(['female', 'male'], [0, 1])
train['Embarked'].replace(['C', 'Q', 'S'], [1, 2, 3])
# Fill missing values in Age feature with each sex’s median value of Age
train['Age'].fillna(train.groupby('Sex')['Age'].transform("median"), inplace=True)
linReg = LinearRegression()
data = train[['Pclass', 'Sex', 'Parch', 'Fare', 'Age']]
# implement train_test_split
x_train, x_test, y_train, y_test = train_test_split(data, train['Survived'], test_size=0.2, random_state=0)
# Training the machine learning algorithm
linReg.fit(x_train, y_train)
# Checking the accuracy score of the model
accuracy = linReg.score(x_test, y_test)
print(accuracy*100, '%')
这条线以前看起来像这样:data = train[['Pclass', 'Parch', 'Fare', 'Age']]
,最终给了我 19.5% 的准确率。我意识到我没有包括性,所以我继续这样做:
data = train[['Pclass', 'Sex', 'Parch', 'Fare', 'Age']]
然后,我收到以下错误:
ValueError: could not convert string to float: 'female'
在这里我意识到我对我所做的更改train['Sex']
并train['Age']
没有反映模型的训练和测试,这似乎是我的模型表现在 19.5% 的原因。我怎么会遇到这个问题?
更新
在第一个答案之后,我尝试相应地修改这一行:
train['Age'].fillna(train.groupby('Sex')['Age'].transform("median"), inplace=True)
和 :
train['Age'] = train['Age'].fillna(train.groupby('Sex')['Age'].transform("median"), inplace=True)
然后我决定打印该Age
列,结果发现这些值已损坏:
0 None
1 None
2 None
3 None
4 None
5 None
6 None
7 None
8 None
9 None
10 None
11 None
12 None
13 None
14 None
15 None
16 None
17 None
18 None
19 None
20 None
21 None
22 None
23 None
24 None
25 None
26 None
27 None
28 None
29 None
...
861 None
862 None
863 None
864 None
865 None
866 None
867 None
868 None
869 None
870 None
871 None
872 None
873 None
874 None
875 None
876 None
877 None
878 None
879 None
880 None
881 None
882 None
883 None
884 None
885 None
886 None
887 None
888 None
889 None
890 None
Name: Age, Length: 891, dtype: object
解决方案
那是因为您没有使用该行保存对数据框的修改:
train['Sex'].replace(['female', 'male'], [0, 1])
尝试用这个替换它:
train['sex'] = train['Sex'].replace(['female', 'male'], [0, 1])
对train['Embarked']
.
更新
您不需要这样做train['Age']
,fillna 已经使用inplace=true
.
推荐阅读
- javascript - 保持侧导航打开到当前 url Javascript
- javascript - 带有 Gatsby + Contentful + react 响应式轮播的英雄横幅轮播
- python - 检测同一视图的两个不同拍摄图像之间的差异
- puppeteer - Mochawesome 报告可视化。(使用 CodeceptJS 和 Puppeteer)我能够创建报告,但无法正确查看
- pyspark - 如何从 Databrick/PySpark 覆盖/更新 Azure Cosmos DB 中的集合
- javascript - 动态生成的删除按钮应删除其 p 标签
- powerbi - 如何计算昨天、过去 7 天、本周到今天、本月到今天用户登录 power bi 的计数?
- linux - 如何找出哪种字体可以显示这些字符?
- node.js - 使用 heroku 从 vue 应用程序对 server.js 进行 ajax 调用
- google-cloud-platform - 在哪里可以找到 Google Cloud Platform Deep Learning VM 映像和 Deep Learning Containers 的源代码?