DataWhale第二次打卡
感觉学习还是比较紧凑的,需要掌握的东西挺多的。还涉及到一点比较新的知识,这些知识还是比较难去掌握的。
第二章
第一部分 数据清洗
2.1.1缺失值的整理
-
查看和判断缺失值
data.isna().sum() data.isnull().sum() #结果显示: PassengerId 0 Survived 0 Pclass 0 Name 0 Sex 0 Age 177 SibSp 0 Parch 0 Ticket 0 Fare 0 Cabin 687 Embarked 2 dtype: int64
-
删除缺失值
df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) axis : {0 or 'index', 1 or 'columns'}, default 0 0, or 'index':删除包含丢失值的行 1, or 'columns':删除包含丢失值的列 how : {'any', 'all'}, default 'any' 'any': 如果存在NA值,则删除该行或列 'all': 如果所有值都是NA,则删除该行或列 thresh: int,保留含有int个非空值的行 subset: 对特定的列进行缺失值删除处理
具体运用:
data["Age"].dropna() #可看最后删除后的空值情况 data["Age"].dropna().isnull().sum()
-
填充缺失值
df.fillna(values= , axis = , method = ,limit= ,inplace= ) method参数:改变替代值的方式 当为'ffill',表示用前面的值填充 当'bfill'表示用后面的值填充。 axis参数默认为0,即沿着行填充,为1则沿着列填充 limit=” “限制填充个数
具体运用
data.fillna(method="ffill")
-
替代缺失值
df.replace(替代值,替换值)
具体运用:
data.replace(np.nan,"空")
2.1.2重复值观察和处理
-
查看重复项
df.duplicated() #统计重复项的次数 df.duplicated().sum()
-
处理重复值
df.drop_duplicates(self, subset=None, keep=‘first’, inplace=False) subset:需要删除的列,默认是全部的列 keep:{‘first’, ‘last’, False}, default ‘first’ 确定要保留的重复项(如果有),first和last分别是第一次和最后一次,false则是删除所有的重复项 inplace:bool, default False, 是否覆盖原来的df 如果inplace=Ture,则返回删除重复项的df ignore_index:bool, default False
第二部分 特征观察与处理
2.2.1 分箱(离散化)处理
分箱操作:将连续数据离散化
-pd.cut(data,分组范围,labels= ,):根据样本数值进行分箱
具体运用:
data1["Age"]=pd.cut(data1["Age"],5,labels=[1,2,3,4,5],right=False)
#right参数:决定哪边进行闭合
-pd.qcut(data,分组范围,labels= ):根据样本分位数进行分箱
具体运用:
data3["Age"]=pd.qcut(data3["Age"],[0,1,0.3,0.5,0.7,0.9],labels=list(range(1,6)))
2.2.2 sklearn.preprocessing的LabelEncoder
感觉这方法跟dict 结合df.map()映射差不多的
##参考答案
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))
##自己写的答案
from sklearn import preprocessing
le=preprocessing.LabelEncoder()
list_1=[x for x in data["Cabin"].unique()]
data4["Cabin"]=data4["Cabin"].replace(np.nan,"空")
list_1.append("空")
le=le.fit(list_1)
data4["Cabin"]=le.transform(data4["Cabin"])
2.2.3 one-hot编码
(还没有搞懂为什么数据处理中需要用到这个)
2.2.4 文本特征的提取
- str.extract()
可用正则从字符数据中抽取匹配的数据,只返回第一个匹配的数据。
(正则表达式的知识需要后续加强学习)
(不定时更新)