python大数据之缺省值处理

一般对数据进行缺省值处理,都是全部的数据,所以这里先不做分割。

废话不多说,直接上干货


一些常用的命令

#读取csv文件
df_train = pd.read_csv("data2/train.csv")

#读取xlsx文件
df_train = pd.read_excel("data2/train.csv")

#保存csv文件
df_train.to_csv("test.csv",index=0)  #一般是不保存索引的 

#获取缺省值的情况
df_miss = df_train.isnull().sum()
df_miss

#对缺省值的结果进行画图
df_miss[df_miss>0].plot(kind='bar')
plt.savefig("缺省值.jpg",dpi=200, bbox_inches='tight')

#类型转换:这里是转换为float
for col in df_train:
    if col not in ['car_id','creatDate','regDate']: #不进行转换的特征
        df_train[col].fillna(0,inplace=True)
        df_train[col] = pd.to_numeric(df_train[col])

还有一些常用的dataframe操作可以参考如下文章。

python大数据之dataframe常用操作

接下来还要介绍缺省值填充的函数

fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
#value:固定值,可以用固定数字、均值、中位数、众数等,此外还可以用字典,series等形式数据;
#method:填充方法,'bfill','backfill','pad','ffill'
#axis: 填充方向,默认0和index,还可以填1和columns
#inplace:在原有数据上直接修改
#limit:填充个数,如1,每列只填充1个缺失值
删除法

删除缺省值超过一定数量的

import pandas as pd

#删除所有样本中缺失值超过20%的行
def del_rows(data):
    t = int(0.8*data.shape[1])
    data = data.dropna(thresh=t)#保留至少有 t 个非空的行
    #data = data[(data.T != 0).any()]
    return data
#删除所有行中缺失值超过20%的列
def remcolumns(data):
    t = int(0.8*data.shape[0])
    data = data.dropna(thresh=t,axis=1)#保留至少有 t 个非空的列
    #data = data.loc[:, (data != 0).any(axis=0)]
    return data
临近值填充

对每一列的缺失值,采用临近位置的数据进行填充

#使用每列缺失值前面的值进行填充(按相应列填充,按照相应index前后填充)
df.fillna(method='ffill',inplace=True)
df.fillna(method='pad',inplace=True)
#使用每列缺失值后面的值进行填充(按相应列填充,按照相应index前后填充)
df.fillna(method='backfill',inplace=True)
df.fillna(method='bfill',inplace=True)
#使用每列缺失值前面的值进行填充(按相邻列填充,按照相应columns前后填充)
df.fillna(method='ffill',inplace=True,axis=1)
df.fillna(method='pad',inplace=True,axis='columns')
#使用每列缺失值后面的值进行填充(按相邻列填充,按照相应columns前后填充)
df.fillna(method='backfill',inplace=True,axis=1)
df.fillna(method='bfill',inplace=True,axis='columns')
平均值填充

一般针对数值型变量,采用平均值填充

方法一

#对所有数据进行平均值填充
DataFrame.fillna(DataFrame.mean())

#对列进行平均值填充
df['B'] = df['B'].fillna(df['B'].mean())
df['B'].fillna(df['B'].mean(), inplace = True)#直接在原有的数据上进行修改

方法二

from sklearn.impute import SimpleImputer #导入模块
imp_mean=SimpleImputer(missing_values=np.nan,strategy='mean')  #实例化,均值填充
imp_mean=imp_mean.fit_transform(data)     #fit_transform一步完成调取结果
众数填充

一般是针对类别型变量,采用众数填充

#对所有数据进行众数填充
DataFrame.fillna(DataFrame.mode())

#对列进行众数填充
df['B'] = df['B'].fillna(df['B'].mode())
df['B'].fillna(df['B'].mode(), inplace = True)#直接在原有的数据上进行修改

方法二

from sklearn.impute import SimpleImputer #导入模块
imp_mean=SimpleImputer(missing_values=np.nan,strategy='mode')  #实例化,均值填充
imp_mean=imp_mean.fit_transform(data)     #fit_transform一步完成调取结果
中位数填充

一般针对整数型变量,采用中位数进行填充
方法一

#对所有数据进行众数填充
DataFrame.fillna(DataFrame.median())

#对列进行众数填充
df['B'] = df['B'].fillna(df['B'].median())
df['B'].fillna(df['B'].median(), inplace = True) #直接在原有的数据上进行修改

方法二

from sklearn.impute import SimpleImputer #导入模块
imp_mean=SimpleImputer(missing_values=np.nan,strategy='median')  #实例化,均值填充
imp_mean=imp_mean.fit_transform(data)     #fit_transform一步完成调取结果
KNN填充

knn找最近邻。

from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=1)
imputer.fit_transform(data)
回归填充

对于有缺失值的特征值,将已知特征值代入模型来估计未知特征值,以此估计值来进行填充,该填充方法适用于缺失值为定量的数据类型。

from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
#data为缺失的数据集
imp = IterativeImputer(max_iter=10, random_state=0)
imp.fit(data)  
 
print(np.round(imp.transform(data)))
总结

以上是我在建模比赛过程中,常用到的缺省值的填充方法,缺省值的填充应该很多其他方法,这里暂时就不作介绍了。


老规矩,有用,希望留下宝贵的二连!

你可能感兴趣的:(python,python,大数据,pandas)