int() argument must be a string, a bytes-like object or a number, not ‘method‘

一个比较蠢的错误,在这里记下来

for dataset in data_cleaner:  # data_cleaner[0]为训练集, data_cleaner[1]为测试集
    # Age 年龄:用平均值替代NaN
    dataset["Age"].fillna(dataset["Age"].median, inplace=True) 

    # Embarked 登陆港口:用众数替代NaN
    dataset["Embarked"].fillna(dataset["Embarked"].mode, inplace=True)

    # Fare 票价:用平均数替代NaN
    dataset['Fare'].fillna(dataset["Fare"].mean, inplace=True)

median,mode,mean的后面都没有加上(),导致返回的类型为"method",在后续的astype处理中这些用来代替NaN的数据无法转为int或者float类型,报了标题所示的错误。

纠正方法:加上()就好了

for dataset in data_cleaner:  # data_cleaner[0]为训练集, data_cleaner[1]为测试集
    # Age 年龄:用平均值替代NaN
    dataset["Age"].fillna(dataset["Age"].median(), inplace=True) # 设置inpalce = True才会改变源数据,还要注意median后要加(),不然返回的是method类型,无法操作

    # Embarked 登陆港口:用众数替代NaN
    dataset["Embarked"].fillna(dataset["Embarked"].mode(), inplace=True)

    # Fare 票价:用平均数替代NaN
    dataset['Fare'].fillna(dataset["Fare"].mean(), inplace=True)

这是后面的调用 astype()转换数据类型的代码

# 定义新特征  FamilySize     IsAlone      Title       FareBin        AgeBin
for dataset in data_cleaner:
    # SibSp:乘客在船上的兄弟姐妹/配偶数量
    # Parch:乘客在船上的父母/孩子数量
    dataset["Family size"] = dataset['SibSp'] + dataset['Parch'] + 1
    dataset["IsAlone"] = 1
    dataset['IsAlone'].loc[dataset['Family size']>1] = 0 # .loc[]也可以传入布尔值列表
    dataset['Title'] = dataset['Name'].str.split(", ", expand=True)[1].str.split(".", expand=True)[0]  # 将拆分开的元素单独成列
    dataset["FareBin"] = pd.qcut(dataset['Fare'], 4)
    dataset["AgeBin"] = pd.cut(dataset["Age"].astype(int), 5)

你可能感兴趣的:(python,开发语言)