import pandas as pd from sklearn.ensemble import RandomForestRegressor titanic = pd.read_csv("D:/新建文件夹/实训/train.csv") ### 使用 RandomForestClassifier 填补缺失的年龄属性 def set_missing_ages(df): # 把已有的数值型特征取出来丢进Random Forest Regressor中 age_df = df[['Age', 'Fare', 'Parch', 'SibSp', 'Pclass']] # 乘客分成已知年龄和未知年龄两部分 known_age = age_df[age_df.Age.notnull()].values() unknown_age = age_df[age_df.Age.isnull()].values() # y即目标年龄 y = known_age[:, 0] # X即特征属性值 X = known_age[:, 1:] # fit到RandomForestRegressor之中 rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1) rfr.fit(X, y) # 用得到的模型进行未知年龄结果预测 predictedAges = rfr.predict(unknown_age[:, 1::]) # 用得到的预测结果填补原缺失数据 df.loc[(df.Age.isnull()), 'Age'] = predictedAges return df titanic = set_missing_ages(titanic) #将Embarked,Sex,Pclass转换成为onehot编码 dummies_Embarked = pd.get_dummies(titanic['Embarked'], prefix= 'Embarked') dummies_Sex = pd.get_dummies(titanic['Sex'], prefix= 'Sex') dummies_Pclass = pd.get_dummies(titanic['Pclass'], prefix= 'Pclass') df = pd.concat([titanic, dummies_Embarked, dummies_Sex, dummies_Pclass], axis=1) df.drop(['Pclass', 'Name', 'Sex', 'Ticket', 'Cabin', 'Embarked'], axis=1, inplace=True) print(df)
时间: 2024-03-11 13:46:47 浏览: 64
python 常用 示例 数据 train.csv eval.csv titanic.csv
这段代码的问题可能是在以下这行代码:
```python
known_age = age_df[age_df.Age.notnull()].values()
```
这里的 values() 应该改成 values。
values() 是一个 pandas DataFrame 的方法,用来返回数据帧的值的 Numpy 数组形式。但是在这里,我们已经使用了 .values 属性来获取 age_df 的 Numpy 数组形式,所以不能再次使用 values() 方法。修改代码为:
```python
known_age = age_df[age_df.Age.notnull()].values
```
这样就可以避免这个错误了。
阅读全文