我正在尝试使用Python解决Kaggle的《泰坦尼克号》。 但是我在尝试拟合数据时出错。 这是我的代码:
let result = arr.reduce(function(ret, row) {
// assuming `xyz` can be only `null` or an object
if ( row.xyz !== null ) {
ret.push(row.xyz.xyz_id);
}
return ret;
}, []);
错误是这样的:
import pandas as pd
from sklearn import linear_model
def clean_data(data):
data["Fare"] = data["Fare"].fillna(data["Fare"].dropna().median())
data["Age"] = data["Age"].fillna(data["Age"].dropna().median())
data.loc[data["Sex"] == "male", "Sex"] = 0
data.loc[data["Sex"] == "female", "Sex"] = 1
data.loc["Embarked"] = data["Embarked"].fillna("S")
data.loc[data["Embarked"] == "S", "Embarked"] = 0
data.loc[data["Embarked"] == "C", "Embarked"] = 1
data.loc[data["Embarked"] == "Q", "Embarked"] = 2
train = pd.read_csv("train.csv")
clean_data(train)
target = train["Survived"].values
features = train[["Pclass", "Age","Sex","SibSp", "Parch"]].values
classifier = linear_model.LogisticRegression()
classifier_ = classifier.fit(features, target) # Here is where error comes from
你能帮我吗?
答案 0 :(得分:0)
在使模型具有特征和目标之前,最佳实践是检查要在构建模型时使用的所有特征中是否存在空值。您可以在下面了解一下
dataframe_name.isnull()。any(),如果存在至少一个Nan值,它将给出列名和True
dataframe_name.isnull()。sum()这将给出列名和存在的NaN值的值
通过知道列名,然后执行数据清除。 这不会造成NaN问题。
答案 1 :(得分:0)
在运行任何sklearn代码之前,您应该重置数据帧的索引:
df = df.reset_index()
答案 2 :(得分:0)
Nan仅表示数据集中的空,无或空值。首先,在对数据集应用某些ML算法之前,首先需要对数据集进行预处理,以进行简化的处理。换句话说,这称为数据清理。您可以使用scikit Learn的imputer模块来处理Nan。
如何检查数据集是否具有Nan :
数据框的isnan()
返回一个True / False值列表,以显示某列是否包含Nan。例如,
str = pd.Series(['a','b',np.nan, 'c', 'np.nan'])
str.isnull()
out: False, False, True, False, True
然后str.isnull().sum()
将返回系列中存在的空值的数量。在这种情况下,为“ 2”。
您可以将此方法应用于数据框本身,例如df.isnan()
我知道处理Nan 的两种技术:
1。删除包含Nan的行。
例如
str.dropna()
或str.dropna(inplace=True)
或df.dropna(how=all)
但这会从数据集中删除许多有价值的信息。因此,大多数情况下我们避免这样做。
2.插入:用列的平均值/中位数替换Nan值。
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
#strategy can also be median or most_frequent
imputer = imputer.fit(training_data_df)
imputed_data = imputer.fit_transform(training_data_df.values)
print(imputed_data_df)
我希望这会对您有所帮助。