数据挖掘笔记:
数据清理&特征处理
缺失值观察与处理
1.显示缺失值数量:
df.info()
df.isnull().sum()
2.对缺失值进行处理
(1)处理缺失值一般有几种思路
(2) 请尝试对Age列的数据的缺失值进行处理
(3) 请尝试使用不同的方法直接对整张表的缺失值进行处理
df[df['Age']==None] = 0
df[df['Age'].isnull()] = 0
df[df['Age'] == np.nan] = 0
【思考】检索空缺值用np.nan要比用None好,这是为什么?
【回答】数值列读取数据后,空缺值的数据类型为float64所以用None一般索引不到,比较的时候最好用np.nan
df['Age'].fillna(0, inplace=True)
df.dropna(inplace=True)
df.drop(drop_index)
一般可以通过fillna、dropna,或者通过确定了要丢弃的index之后用drop之间丢弃。
3.np.nan和Nan代表的缺失值有区别。⭐
重复值观察与处理
1.df.duplicated()查看重复值:
df.duplicated()
2.df.drop_duplicates()去重:
df.drop_duplicates()
特征观察与处理
1.pd.cut()这个函数对于从连续变量转换为分类变量也很有用。例如,cut可以将年龄转换为年龄组。
df['AgeBand'] = pd.cut(df['Age'], 5, labels=['1', '2', '3', '4', '5'])
df.head()
df['AgeBand'] = pd.cut(df['Age'], [0,5,15,30,50,80], labels=['1', '2', '3', '4', '5'])
df.head(3)
df['AgeBand'] = pd.qcut(df['Age'], [0, 0.1, 0.3, 0.5, 0.7, 0.9], labels=['1', '2', '3', '4', '5'])
df.head(3)
2.对文本变量进行转换
(1) 查看文本变量名及种类
df['Sex'].value_counts()
male 577
female 314
Name: Sex, dtype: int64
df['Sex'].unique()
array(['male', 'female'], dtype=object)
df['Sex'].nunique()
2
df['Cabin'].nunique()
147
(2) 将文本变量Sex, Cabin ,Embarked用数值变量12345表示
#方法一: replace
df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
df.head()
#方法二: map
df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})
df.head()
#方法三: 使用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()
(3) 将文本变量Sex, Cabin, Embarked用one-hot编码表示
#将类别文本转换为one-hot编码
#方法一: OneHotEncoder
for feat in ["Age", "Embarked"]:
x = pd.get_dummies(df[feat], prefix=feat)
df = pd.concat([df, x], axis=1)
df.head()
3.从纯文本Name特征里提取出Titles的特征(所谓的Titles就是Mr,Miss,Mrs等):
df['Title'] = df['Name'].str.extract('([A-Za-z]+)\.', expand=False)
df.head()
这是对正则表达式的语法规则不了解的问题。([A-Za-z]+)\.这个正则模式可以这样来理解:
[A-Za-z]代表任一字母(大写或小写)
+ 代表+号前的字符出现1次或多次
\. 代表 .
([A-Za-z]+). 是匹配 一个或多个字母并且以.结尾的所有字符串组合