欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

动手学数据分析之“数据清洗及特征处理”

程序员文章站 2022-04-28 23:49:30
...

1数据清洗

1.1缺失值观察和处理

1.1.1缺失值观察

使用df.info()可以获得数据的索引,数据类型和内存信息

df.info()

动手学数据分析之“数据清洗及特征处理”
使用.isnull()函数可以观察缺失值

df.isnull()

动手学数据分析之“数据清洗及特征处理”
使用,sum()函数可以进行统计

df.isnull().sum()

动手学数据分析之“数据清洗及特征处理”

1.1.2处理缺失

法1:
使用isnull()函数进行判断然后替代为0

df = pd.read_csv('train.csv')
df[df['Age'].isnull()]=0
(df['Age']==0).sum()

动手学数据分析之“数据清洗及特征处理”
法2:
使用dropna()函数,该函数会将包含null的所在行直接抛弃,而且不能对列单独进行选择列

df = pd.read_csv('train.csv')
df = df.dropna()
df['Age']

动手学数据分析之“数据清洗及特征处理”
法3:
也可以使用fillna()函数,将缺失值填补上,fillna默认会返回新对象,但也可以对现有对象进行就地修改(inplace=True),该方法较灵活且不丢弃数据:

df.fillna(0)
_ = df.fillna(0, inplace=True)
df['Age']

动手学数据分析之“数据清洗及特征处理”

1.2重复值观察与处理

1.2.1查看数据中的重复值

可以使用.duplicated()函数,该方法返回一个布尔型Series,表示各行是否是重复行(前面出现过的行):

df.duplicated(['Age'])

动手学数据分析之“数据清洗及特征处理”
还可以对多个列的数据进行判断:

df.duplicated(['Age','Pclass'])

动手学数据分析之“数据清洗及特征处理”

1.2.2处理重复值

法1:使用drop_duplicates()删除重复值:

df.drop_duplicates(['Age'])

动手学数据分析之“数据清洗及特征处理”

2.特征观察与处理

面元划分:为了便于分析,连续数据常常被离散化或拆分为“面元”(bin)。
可以使用.cut()进行多种划分。
等间隔划分:

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

动手学数据分析之“数据清洗及特征处理”
指定间隔划分,区间的开闭可以由right=False进行控制:

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表示
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对文本进行转换

(1)可以使用value——counts()函数对列的内容进行计数:

df['Sex'].value_counts()

动手学数据分析之“数据清洗及特征处理”
动手学数据分析之“数据清洗及特征处理”
(2)可以使用replace()函数,对文本内容进行替换

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

动手学数据分析之“数据清洗及特征处理”
(3)通过data.map,所有字符串和正则表达式方法都能被应用于(传入lambda表达式或其他函数)各个值。

df['Sex_num'] = df['Sex'].map({'male': 33, 'female': 15})
df.head(3)

动手学数据分析之“数据清洗及特征处理”
(4)使用get_dummy()方法可以获得one_hot变量

for feat in ["Age", "Embarked"]:
#     x = pd.get_dummies(df["Age"] // 6)
#     x = pd.get_dummies(pd.cut(df['Age'],5))
    x = pd.get_dummies(df[feat], prefix=feat)
    df = pd.concat([df, x], axis=1)
    #df[feat] = pd.get_dummies(df[feat], prefix=feat)
    
df.head()

动手学数据分析之“数据清洗及特征处理”

2.2提取特征

从文本中提取特征可以使用正则表达式(对正则表达式的学习较花时间,后期有时间和必要再进行学习):
比如这个从Name中提取称谓特征的例子:
动手学数据分析之“数据清洗及特征处理”