数据预处理 | 处理残缺值(Missing value)python-sklearn实现| 三种常用方法 | Kaggle 学习笔记(三)

方法一: 移除法(Drop)
将含有残缺值的列直接丢弃。这种方法可能会导致大量有用的信息丢失。
在这里插入图片描述

import pandas as pd

# 读取数据
data = pd.read_csv("filename.csv") 

# 提取出含有残缺值的列
cols_with_missing = [col for col in data.columns if data[col].isnull().any()]

# 移除含有残缺值的列
reduced_data = data.drop(cols_with_missing, axis=1)

方法二: 插值法(Imputation)
用新的数据填充残缺值的位置,一般可用均值(mean value)填充。虽然填充值并不一定精确,但是它不用丢弃整一列的数据。
在这里插入图片描述

from sklearn.impute import SimpleImputer
import pandas as pd

# 读取数据
data = pd.read_csv("filename.csv") 

# Imputation 用该列均值填充残缺值
my_imputer = SimpleImputer()
imputed_data = pd.DataFrame(my_imputer.fit_transform(data))

# Imputation 通常会移除列名,因此要将它们取回
imputed_data.columns = data.columns

处理类别变量中的残缺值

from sklearn.base import BaseEstimator, TransformerMixin

class MostFrequentImputer(BaseEstimator, TransformerMixin):
	def fit(self, X, y=None):
	# 选取出现次数最多的同类型类别变量
		self.most_frequent_ = pd.Series([X[c].value_counts().index[0] for c in X], index=X.columns)
		return self
	def transform(self, X, y=None):
		return X.fillna(self.most_frequent_)

cat_imputer = MostFrequenctImputer()
imputed_data = pd.DataFrame(cat_imputer.fit_transform(data))

方法三: 插值法的延伸
通常情况下,插值法(imputation)可以很好的解决问题,但是插入的均值要么高于或低于实际值(actual value),因此导致计算的结果与现实情况有所出入。因此,我们除了查入均值外,对于每个含有残缺值的列,我们都额外添加一列来表示该列中残缺值的位置。在某些应用中,这个方法能优化结果,当然有时候也不起作用。
在这里插入图片描述

from sklearn.impute import SimpleImputer
import pandas as pd

# 读取数据
data = pd.read_csv('filename.csv')

# 复制该数据集,以免接下来的操作(imputing)更改了原来的数据
data_plus = data.copy()

# 获取含有缺失值的列的列名
cols_with_missing = [col for col in data.columns if data[col].isnull().any()]

# 增添新的列来表明缺失值的位置
for col in cols_with_missing:
	data_plus[col + '_was_missing'] = data_plus[col].isnull()

# Imputation 在残缺值的位置插入该列的平均值
my_imputer = SimpleImputer()
imputed_data_plus = pd.DataFrame(my_imputer.fit_transform(data_plus))

# Imputation 通常会移除列名,因此要将它们取回
imputed_data_plus.columns = data_plus.columns

# 统计数据集中每一列的缺失值数目
missing_val_count_by_column = (data.isnull().sum())
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想了解如何用 Python 和 Scikit-learn 进行数据分析和机器学习。我可以为您提供一些指导。 首先,您需要在 Kaggle 上寻找数据集。Kaggle 是一个数据科学和机器学习社区,您可以在上面找到各种类型的数据集。例如,您可以在 https://www.kaggle.com/datasets 上查找各种数据集。 一旦您找到了感兴趣的数据集,您需要使用 Python 中的 Scikit-learn 包进行数据处理和机器学习分析。Scikit-learn 是一个用于机器学习Python 库,提供了各种工具和算法,可以帮助您完成各种任务,如分类、回归、聚类等。 以下是一个简单的机器学习示例,演示如何使用 Scikit-learn 进行数据分析和机器学习: ```python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score # 读取数据集 data = pd.read_csv('dataset.csv') # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(data.iloc[:, :-1], data.iloc[:, -1], test_size=0.2) # 定义决策树模型 model = DecisionTreeClassifier() # 训练模型 model.fit(X_train, y_train) # 预测测试集 y_pred = model.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print('准确率:', accuracy) ``` 在上面的代码中,我们首先使用 Pandas 库读取数据集,然后使用 Scikit-learn 的 `train_test_split` 函数将数据集划分为训练集和测试集。随后,我们定义了一个决策树模型,并使用训练集对模型进行训练。最后,我们使用测试集对模型进行预测,并计算准确率。 注意,这只是一个简单的示例。在实际应用中,您需要根据具体的问题和数据集选择适当的算法和工具,并进行更复杂的数据处理和特征工程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值