一般对数据进行缺省值处理,都是全部的数据,所以这里先不做分割。
废话不多说,直接上干货
一些常用的命令
#读取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找最近邻。
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)))
以上是我在建模比赛过程中,常用到的缺省值的填充方法,缺省值的填充应该很多其他方法,这里暂时就不作介绍了。
老规矩,有用,希望留下宝贵的二连!