DataWhale 动手学数据分析Task02、03

前言:数据清洗

 

我们拿到的数据通常是不干净的,所谓的不干净,就是数据中有缺失值,有一些异常点等,需要经过一定的处理才能继续做后面的分析或建模,所以拿到数据的第一步是进行数据清洗。

学习内容:缺失值、重复值、字符串和数据转换

一、查看缺失值

data.isnull() #缺失值的地方返回true
data.isnull().sum() #返回每列缺失值的个数
data.info() #返回内容更详细,返回每列不是缺失值的个数,以及总行数

二、对缺失值进行处理

滤除缺失数据

data.dropna() #丢弃有缺失值的行
data.dropna(how = 'all') #丢弃全为NA的行
#丢弃列,传入'axis = 1'

 填充缺失数据

data.fillna(0) #讲缺失值填充为0,默认返回新对象
data.fillna(0,inplace = true) #对现有对象就地修改
data.fillna(data.mean()) #用每列的均值填充
data.fillna(data.median()) #用每列的中位数填充
data['name'].fillna(data['name'].mean()) #对name列用name列的均值填充

三、查看重复值

data.duplicated() #判断各行是否为重复行(前面出现过的行)
data.drop_duplicates() #返回DataFrame,重复行标为False

四、数据分箱(对连续变量离散化)

均等分

data['new_columns_name'] = pd.cut(data['columns_name'],5,labels = [1,2,3,4,5])
#pd.cut(data['columns_name'],均等分的份数,分箱后的标签名)

指定区间划分

data['new_columns_name'] = pd.cut(data['columns_name'],[0,5,15,30,50,80],labels = [1,2,3,4,5])
#pd.cut(data['columns_name'],人为设定划分的区间点,划分后的标签)

按照百分比划分

data['new_columns_name'] = pd.qcut(data['columns_name'],[0,0.1,0.3,0.5,0.7,0.9],labels = [1,2,3,4,5])
#pd.qcut(data['columns_name'],人为设定划分百分比(用小数表示),划定后的标签)

查看每列数据的类别

data['columns_name'].value_counts() #查看该列数据,每种出现了多少次

data['columns_name'].unique() #以数组形式返回列的所有唯一值
data['columns_name'].nunique() #返回所有唯一值的个数

改变类别文本

data['new_columns_name'] = data['columns_name'].replace(['male','female'],[1,2])
#data['columns_name'].replace([原种类名],[要替换成的新名])

data['columns_name'] = data['columns_name'].map({'male': 1, 'female': 2})
#data['columns_name'].map({'原种类名': 要替换成的新名, '原种类名': 要替换成的新名}),以字典的形式

将文本标签转化为数字

zip()

a = [1,2,3,4]
b = [5,6,7,8]
zipped = zip(a,b)
print(dict(zipped))

 astype()转换数据类型

 五、正则表达式

数据重构

一、数据合并

concat

list = [a,b]
result = pd.concat(list) #默认纵向合并,横向合并输入参数axis = 1

数据集的合并(join,append)

join:索引合并。

append:上下拼

merge

stack:将列旋转到行,旋转后是serise类型的数据

二、group by

s = df['column_name'].groupby(result['key']) #按照key分类,取column_name的数据
df.groupby(by = 'key').agg({'columns_name1' : 'mean','columns_name2' : 'sum'})
#按照key列分类,对columns_name1的数据求均值,对columns_name2的数据求和,agg()里是字典的形式
#在其后使用.rename(columns={})可以修改列标签名称

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值