数据分析中的‘疑难杂症‘小结(二)
1. 如何对整个DataFrame数据的缺失值进行处理
-
使用
dropna()
直接删除含有缺失值的行 -
使用
fillna(num)
进行缺失值的替换填充例如:df.dropna().head(3) / df.fillna(0).head(3)
2. 数据中重复值的查看
-
使用
duplicated()
判断重复数值,说明:duplicated()是对整行进行查重,return 重复了的数据,且只现实n-1条重复的数据(n是重复的次数)例如:df[df.duplicate()]
-
drop_duplicates()
函数是将所有重复的数据都去掉了,且默认保留重复数据的第一条。例如:frame.drop_duplicates()
3. 数据预处理的分箱操作
在建立模型前一般需要对特征变量进行离散化。特征离散化后,模型会更稳定,降低模型过拟合的风险。而特征离散化处理通常采用的就是分享法。数据分箱又分为有监督分箱和无监督分箱,石佛使用标签决定是有监督还是无监督。
简单的数值分距使用pd.cut
,按频率分距使用pd.qcut
具体分箱细节:https://blog.csdn.net/qq_22172133/article/details/118883524
4. 查看文本变量的三种方式
- value_counts
显示变量名及其对应数量。例如:df[‘Sex‘].value_counts()
- unique
显示变量名。例如:df[‘Sex‘].unique()
- nunique
显示变量名种类数。例如:df[‘Sex‘].nunique()
5. 类别文本的转换
-
replace
来实现
例如:df[‘Sex_num‘] = df[‘Sex‘].replace([‘male‘,‘female‘],[1,2])
-
map
实现
例如:df[‘Sex_num‘] = df[‘Sex‘].map({‘male‘: 1, ‘female‘: 2})
-
sklearn preprocessing
中的LabelEncoder
实现
from sklearn.preprocessing import LabelEncoder
for feat in [‘Cabin‘, ‘Ticket‘]:
lbl = LabelEncoder()
label_dict = dict(zip(df[feat].unique(), range(df[feat].nunique())))
df[feat + "_labelEncode"] = df[feat].map(label_dict)
df[feat + "_labelEncode"] = lbl.fit_transform(df[feat].astype(str))
df.head()
6. 类别文本转one-hot编码
-
pd.get_dummies
进行编码转化
x = pd.get_dummies(df[feat], prefix=feat)
具体用法:https://blog.csdn.net/maymay_/article/details/80198468
7. 文本特征提出
-
str.extract
实现正则表达式抽取
df[‘Title‘] = df.Name.str.extract(‘([A-Za-z]+)\.‘, expand=False)