四、数据处理
(1)缺失值
查看缺失情况:
1 data.isnull()#查看所有缺失值
2 data.isnull().any()#获取含有缺失值的列
3 data.isnull().all()#获取全部为NA的列
删除缺失值:
data2=data.dropna()
利用sklearn替换缺失值。当缺失值为数值型数据时,可用利用均值来替换
data.index=data['name']#将第一列作为索引data=data.drop(['name'],axis=1)#删除第一列
nan_model=Imputer(missing_values='NaN',strategy='mean',axis=0)#按照行均值替换对应缺失值。
nan_result=nan_model.fit_transform(data)
利用pandas替换缺失值(常用)
data.fillna(0) #缺失值用0替换
data.fillna(method='pad')#用前面的值替换
data.fillna(method='backfill')#用后面的值替换
一个实例(https://blog.csdn.net/weixin_41576911/article/details/83744417):
importpandas as pd
importnumpy as np
from sklearn.preprocessing importImputer
df = pd.DataFrame(np.random.randn(6,4),columns = list('abcd'))
df.iloc[4,3] = np.nan#iloc是选择行和列
df.loc[3] = np.nan#loc是选择行
print(df)
print(df.loc[0:2,3])
nan_all=df.isnull()
print(nan_all)
drop = df.dropna()#丢弃包含缺失值的行记录
print(drop)
又一个实例(https://www.jianshu.com/p/d750ba9075dd,写得比我清楚,强推!):
# 删除完全缺失的行,若不指定参数how,则删除的是所有含有nan的行
>>>data.shape
(6578, 7)
>>> data_drop_nan = data.dropna(how='all')
>>>data_drop_nan.shape
(6577, 7)
>>>data.dropna().shape
(6575, 7)
# 对部分缺失行进行填充
# 用后一行的值填充前一行的缺失值
>>> data_drop_nan.fillnan(method='backfill')
# 对指定列填充指定值
>>> data_drop_na.fillna({'购药时间':'2018-01-20 星期三', '社保卡号': '1.338953e+07'})
另一个例子(https://blog.csdn.net/wangxingfan316/article/details/79363420),是将price为0的值改为了36:
data['price'][data['price']==0]=None
x =0
for i indata.columns:
for j inrange(len(data)):
if(data[i].isnull()) [j]:
data[i][j]='36'x+=1
print(x)
(2)数据不平衡
首先是SMOTE函数的使用ÿ