动手学数据分析 Task02

第二章:数据清洗及特征处理

学习目标:将学习缺失值、重复值、字符串和数据转换等操作,将数据清洗成可以分析或建模的样子。

学习心得:通过对本次task02的学习,了解了数据清洗和数据预处理的重要性,要想得到成功的结果,数据必须是正确的,具体来说学会了如何检查并处理缺失值、重复值,然后还对一些连续特征离散化,也用的了上一个任务讲到的方法,收获很大。

动手学数据分析 Task02
可以看到Cabin列存在NaN,如何查看其他列有没有NaN的值?

; 2.1 缺失值观察和处理

查看缺失值

  1. df.info()
    动手学数据分析 Task02
  2. df.isnull().sum()
    动手学数据分析 Task02
    缺失值检查

处理思路:先根据列值选出为空的行索引,然后把这一行设为空值。
方法一:

df[df['Age']== None]=0
df.head(10)

动手学数据分析 Task02

用None处理无效,是因为数值列读取数据后,空缺值的数据类型为float64,所以用None一般索引不到。

方法二:

df[df['Age'].isnull()] = 0
df.head(10)

方法三:

df[df['Age'] == np.nan] = 0
df.head(10)

其实np.nan()和pd.isnull()都可以对不论是DataFrame、Python list还是仅仅一个数值进行空值检测。但一般在实际应用中,np.isnan()多用于单个值的检验,pd.isnull()用于对一个DataFrame或Series(整体)的检验。

缺失值处理

方法一: dropna( )
对于Serial对象,丢弃带有NAN的所有项;对于DataFrame对象,丢弃带有NAN的行

动手学数据分析 Task02
方法二: fillna( )
以常数替换NAN值
动手学数据分析 Task02

2.2重复值观察和处理

查看所有的重复值

df[df.duplicated()]

动手学数据分析 Task02
对整个行有重复值的清理的方法
df = df.drop_duplicates()
df.head(100)

2.3特征观察与处理

对年龄进行离散化处理
将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示

df['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])
df.head(100)

将连续变量Age划分为(0,5] (5,15] (15,30] (30,50] (50,80]五个年龄段,并分别用类别变量12345表示

df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = [1,2,3,4,5])
df.head(3)

将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
(有问题,90%到100%的变量就会变为NaN ,因为没有考虑到他们)

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(100)

动手学数据分析 Task02
对文本变量进行转换
查看类别文本变量名及种类
方法一:
df['Sex'].value_counts()

动手学数据分析 Task02
df['Cabin'].value_counts()

动手学数据分析 Task02

方法二:

df['Sex'].unique()

动手学数据分析 Task02
将类别文本转换为12345

df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
df.head()

动手学数据分析 Task02

df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})
df.head()

动手学数据分析 Task02

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()

动手学数据分析 Task02
将类别文本转换为one-hot编码

for feat in ["Age", "Embarked"]:
    x = pd.get_dummies(df[feat], prefix=feat)
    df = pd.concat([df, x], axis=1)

df.head()

动手学数据分析 Task02

Original: https://blog.csdn.net/qq_42882457/article/details/121959614
Author: ZZE15832206526
Title: 动手学数据分析 Task02

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/675948/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球