pd.get_dummies
возвращает фрейм данных и не выполняет операцию на месте. Поэтому вы действительно отправляете сообщение с колонкой sex
.
Так что вам нужно что-то вроде X = pd.get_dummies(data[['Sex','PClass','Age']], columns=['Sex','PClass'])
, и это должно решить вашу проблему. Я думаю, PClass
также будет строковым столбцом, вам нужно использовать фиктивные переменные, так как он заполняет '3rd'
.
Есть еще несколько мест, где вы звоните data.isnull().any()
, которые ничего не делают с базовым фреймом данных. Я оставил их такими, какие они есть, но, к вашему сведению, они могут делать не то, что вы хотели.
Полный код будет:
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn import cross_validation
import matplotlib.pyplot as plt
%matplotlib inline
data=pd.read_csv("C:\\Users\\kabala\\Downloads\\Titanic.csv")
data.isnull().any() <-----Beware this is not doing anything to the data
data["Age"]=data1["Age"].fillna(data1["Age"].median())
data["PClass"]=data["PClass"].fillna("3rd")
data["PClass"].isnull().any() <-----Beware this is not doing anything to the data
data1.isnull().any() <-----Beware this is not doing anything to the data
#********Fix for your code*******
X = pd.get_dummies(data[['Sex','PClass','Age']], columns=['Sex','PClass'])
# choosing the predictive variables
# x=data[["PClass","Age","Sex"]]
# the target variable is y
y=data["Survived"]
modelrandom=RandomForestClassifier(max_depth=3)
modelrandom=cross_validation.cross_val_score(modelrandom,x,y,cv=5)