常见问题:
缺失值的处理:删除和填充 异常值检测与处理
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': [5, np.nan, np.nan, 8],
'C': [9, 10, 11, 12],
'D':['','','','']
})
df_dropped = df.dropna()
print("删除后:\n",df_dropped)
df_dropped_col = df.dropna(axis=1)
print(df_dropped_col)
df_dropped_all_col = df.dropna(axis=1,how="all")
print(df_dropped_all_col)
#引入SimpleImputer填充模块
from sklearn.impute import SimpleImputer
imputer_num = SimpleImputer(strategy='mean') #均值
imputer_cat = SimpleImputer(strategy='most_frequent') #众数
#df['A'] = imputer_num.fit_transform(df[['A']]) #对某1列进行均值填充
df_fill=pd.DataFrame(imputer_num.fit_transform(df),columns=df.columns) #对整个数据框进行均值填充
print(df_fill)
from sklearn.impute import KNNImputer
#基于相似特征K紧邻填充
imputer_knn = KNNImputer(n_neighbors=2)
df_filled = pd.DataFrame(imputer_knn.fit_transform(df),columns=df.columns) #这里是使用knn对整个数据框进行填充
fit() 用于训练数据生成学习模型参数transform() 从fit()方法生成的参数,应用于模型以生成转换数据集fit_transform() 在同一个数据集上组合fit()和transform()实际使用时,需要先对训练集进行fit(),然后在测试集上transform(),以避免数据泄露。
import sklearn
from sklearn.datasets import load_iris #内置的数据集
from sklearn.model_selection import train_test_split #数据分割模型
iris = load_iris()
#使用这个函数 df_clean = remove_outliners_iqr(df,’A’) #移除数据框df的A列中的异常值 print(df_clean)
- 使用IsolationForest(无监督异常检测)
from sklearn.ensemble import IsolationForest iso_forest = IsolationForest(contamination=0.1,random_state=100) outliers = iso_forest.fit_predict(df[[‘A’,’B’]]) #-1表示异常 df[‘is_outlier’]=outliers #新增1列,即为-1和1的值,1是正常,-1是异常 df_clean=df[df[‘is_outlier’]==1] #筛选出正常的值的行 ```