一、缺失值处理
1、导入包
import numpy as np
import pandas as pd
2、相关方法
2.1 判断数据中是否存在NAN
# 如果存在缺失值就返回true,否则返回false
pd.isnull(dataframe)
# 如果不是缺失值标记为true,否则标记为false
pd.notnull(dataframe)
2.2 删除含有缺失值的样式
# 默认按行删除(axis = 'rows')
dataframe.dropna()
# 修改原数据
dataframe.dropna(inplace=True)
# 不会修改原数据,生成新的处理后的对象
dataframe.dropna(inplace=False)
2.3 替换\插入并补充
# 向原数据中的NAN替换成自己指定的value值,inplace策略和上述一样
dataframe.fillna(value, inplace=False)
3、实例
3.1 技巧1 通过返回true或false来判断是否有缺失值
(1)通过true判断是否有缺失值
# 首先将缺失值标记为true
data1 = pd.isnull(dataframe)
# 通过numpy的any来生成返回值(true代表存在NAN,false代表不存在NAN)
np.any(data1)
# 或者更简单一点,返回true代表存在NAN
data1.any()
(2)通过false判断是否有缺失值
# 首先将缺失值标记为true
data2 = pd.notnull(dataframe)
# 通过numpy的all来生成返回值(false代表存在NAN,true代表不存在NAN)
np.all(data12)
# 或者更简单一点,返回false代表存在NAN
data1.all()
3.2 技巧2 填补缺失值
food["含有NAN的字段名"].fillna(food["含有NAN的字段名"].mean(), inplace=True)
4、处理其它标记的缺失值
4.1 针对不是NAN也不是数字的特殊字符
# 先将特殊字符转换成NAN,之后再逐一处理
data_new = data.replace(to_replace="特殊字符", value=np.nan)
二、数据离散化
1、概念
连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数,离散化方法经常作为数据挖掘的工具
2、分组
2.1 自动分组
pd.qcut(data,bins)
例子
data = ['一堆数据....']
# 首先自动分组(将数据分成了三组)
sr = pd.qcut(data, 3)
# 查看每一组的分组情况
sr.value_counts()
2.2 自定义分组
pd.cut(data,[])
例子
data = ['一堆数据....']
# 首先自定义范围
bins = [150,165,180,195]
# 再自定义分组
sr = pd.cut(data, bins)
# 查看每一组的分组情况
sr.value_counts()
3、将分组好的结果转换成one-hot编码
# 数据离散化
pd.get_dummies(sr, prefix="height")
三、合并操作
1、概念
当数据由多张表组成,有时候需要将不同的内容合并在一起分析
2、按方向合并(pd.concat())
2.1 竖直拼接(axis=0,默认情况)
pd.concat([data1, data2], axis=1)
2.2 水平拼接(axis=1)
pd.concat([data1, data2], axis=0)
3、按索引合并(pd.merge())
3.1 合并策略
left:左连接 主要根据左表索引合并
right:右连接 主要根据右表索引合并
outer:外连接 根据两表所有的索引合并
inner:内连接 根据两表共同的索引合并
3.2 例子
# left左表,right右表,how合并策略:inner内连接,on:按哪个索引合并
pd.merge(left, right, how="inner", on=['索引..'])
四、交叉表与透视表
1、交叉表
1.1 概念
交叉表用于计算一列数据对于另外一列数据的分组个数(寻找两个列之间的关系)
pd.crosstab(value1, value2)
例子
pd.crosstab(food["土豆"], food["天"])
2、透视表
和交叉表差不多
# dataframe:表数据
dataframe.pivot_table(["土豆"], index=["天"])
五、分组与聚合
1、用dataframe的方法进行分组聚合
# col:数据对象 color:字段 prices:字段
# 根据color字段分组,再按prices中最大值进行聚合
col.groupby(by="color")["prices"].max()
2、用Series的方法进行分组聚合
# 根据color字段分组,再按prices中最大值进行聚合
col["prices"].groupby(col["color"]).max()