目录
query(用法类似于SQL中的where)(PRO_8C)
-
✅一、缺失值
-
1.缺失值检查
-
isnull()
-
-
2.缺失值删除
-
dropna
- data.dropna( subset = ['CustomerID'], how='any', inplace=True)
- 删除 CustomerID 列为空 的 行数据 默认axis=0(按行)
-
-
3.缺失值替换 / 填充
-
fillna(PRO10/8C)
- data.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
- method: ffill(用前一个非空值填充)、bfill(后一个)
- axis: 指定填充的轴,行轴0 列轴1
-
interpolate
- data.interpolate(method='linear', axis=0, limit=None, inplace=False,limit_direction=None, limit_area=None, downcast=None, **kwargs)
- axis: 0 (按列插值)(默认);1(按行插值)
-
SimpleImputer(PRO11)
- imputer = SimpleImputer(missing_values=np.nan,strategy="constant",fill_value=0)
- data_new = imputer.fit_transform(data)
-
随机森林等方式(PRO11)
- 将缺失值的列作为标签
- 该列缺失值作为验证数据集,其余作为训练测试集
-
-
-
✅二、重复值
-
1.查找重复值
- duplicated : duplicated(self, subset=None, keep='first')
- data.duplicated(全部是否有重复) / data['user_id'].duplicated (某列的值是否有重复)
-
2.处理重复值
-
删除
- .drop_duplicates()
- PRO12 ==> data[~data['user_id'].isin(del_id)] / del_id:重复的值 data[data['user_id'].duplicated()]['user_id'].values
-
统计
- .value_counts()
-
-
-
✅三、异常值
-
1.查找异常值
-
query(用法类似于SQL中的where)(PRO_8C)
- data.query ( expr , inplace=False )
- expr: 字符串表达式,表示筛选的条件 (表达式语法,使用布尔运算符==、!=、> 等)
- .query() 函数只能用于筛选DataFrame对象,不能用于Series对象或其他类型的数据
-
-
2.处理异常值
-
删除异常值
- drop
- data.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
- label:要删除的行或列的标签
- axis:0为删除行,1为删除列
- index, columns:与label相同功能,在不指定axis情况下使用
- data.drop(data.query("UnitPrice == 0 ").index, inplace=True) 先用query查找出索引,在进行删除(PRO_8C)
- drop
-
当作缺失值处理,以新值填充
-
当作特殊情况分析出现原因
-
-
3.特征缩放(PRO9)
- col = [ 'Amount' , 'Hour' ]
- sc = StandardScaler() # Z-score归一化
- data[col] = sc.fit_transform( data[col] )
-
4.数据类型转化
- type、astype、dtype
- 转换整数:data['CustomerID'] = data['CustomerID'] . astype( np.int32 )
-
-
✅四、索引设置
-
添加索引
- index=
-
更改索引
- set_index
- data.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
- keys:设置索引的行名或者列名
- append:指示是否将新的索引添加到原有的索引之后。默认为False,表示不添加。
- drop:指示是否在新索引中保留原有的列。默认为True,表示将原有的列从DataFrame中删除。
- set_index
-
重命名索引
- reindex
- data.reindex(index=None, columns=None, fill_value=None)
- reindex
-
-
✅五、数据修改与替换
-
1.按列增加数据
-
insert
- list.insert(index,name, element)
- index:插入的索引位置
- name:插入的列名
- element:插入列的元素
-
loc
- data.loc [ : , 'name' ] = [ element ] 等同于 data['name' ] = [ element ]
- 默认插入在最后一列
- name:插入的列名
- element:插入列的元素
-
iloc
- data.iloc[ : , 2] = [ 10,20,30 ]
- 将第三列替换为10 20 30
-
-
2.按行增加数据
-
loc
- data.loc [ 'name' ] = [ element ]
- 默认插在最后一行
-
append
- data.append(element)
-
iloc
- data.iloc[ 2 , : ] = [ 10,20,30 ]
- 将第三行替换为10 20 30
-
-
-
✅六、时间数据
-
1.分割时间
- (年月日和时分秒分开,2017-01-21 22:11:48.556739)
- PRO12:df_new['timestamp'].str.split(' ').str[0]==>2017-01-21
- df_new['timestamp'].str.split(' ')[0]==>2017-01-21 22:11:48.556739(指第一条数据)
-
2.转换成日期格式
- data['InvoiceDate'] = pd.to_datetime ( data['InvoiceDate'] )(PRO_8C)
-
-
✅七、非数值型数据
-
1.编码非数值型数据(map函数)
- PRO11 :mappings={ 'No':0 , 'Yes':1 }
- data['Stage']= data['Stage'].map(mappings)
-
2.自定义编码函数
- (PRO 5)(较麻烦)
-
3.pd.factorize()
- (PRO 2)
- data .loc [ : , 'Embarked' ] , uniques = pd .factorize( data [ 'Embarked' ] )
- 返回两个值 ①编码后的值 ②原数据的唯一值
- 返回0,1,2等,空值返回-1
-
-
✅八、特征重要性排序
-
随机森林
-
(PRO9)
- clf = RandomForestClassifier ()
- clf . fit(X,y)
- clf . feature_importances_
-
-
✅九、标签不平衡问题
-
过采样
-
(PRO9)
- smote_data = SMOTE()
- X,Y是原数据
- X_new , Y_new = smote_data . fit_resample (X , Y)
-

2万+

被折叠的 条评论
为什么被折叠?



