python-数据分析(10-数据清洗)

Pandas

10 Pandas之数据清洗

10.1Pandas数据清洗

数据清洗介绍
数据清洗实际上也是数据质量分析,检查原始数据中是否存在脏数据(不符合要求,或者不能直接进行分析的数据),并且处理脏数据。
常见情况如下

  • 缺失值
  • 异常值
  • 重复数据

处理缺失值
Pandas使用浮点值NaN(not a Number)表示缺失值,并且缺失值在数据中时常出现。那么Pandas的目的之一就是"无痛地"处理缺失值。

 
 
 
判断数据是否为NaN

  • pd.isnull(df) 返回哪些值是缺失值的布尔值
  • pd.notnull(df) 返回值是isnull的反集

注意

  • Python内建的None值也被当作NaN
     
     
     

过滤缺失值

  • dropna(axis=0,how=‘any’,inplace=False)
  • axis             指定轴 默认为0 代表行
  • how             默认为any 代表删除含有NaN的行 当为all 时代表删除所有值为NaN的行
  • inplace        修改被调用的对象 而不是一个备份

 
 
 

 
 
 

补全缺失值(NaN)

  • df.fillna(value=None,method=None,axis=None,inplace=False,limit=None)
  • value 标量或字典对象用于填充缺失值
  • method 插值方法 默认为"ffill"
  • axis 需填充的轴 默认为0
  • inplace 修改被调用的对象 而不是一个备份
  • limit 用于向前或向后填充时最大的填充范围
    python-数据分析(10-数据清洗)_第1张图片

 
 
 

异常值
脏数据也包含不符合要求的数据,那么对这块数据处理不能直接使用fillna填充。使用replace更加灵活。

  • df.replace(to_replace=None,value=None)
    • to_replace 去替换的值
    • value 替换的值
df =pd.DataFrame(np.random.randint(1,80,size=(4,1)),index=["liu","ji","san","hi"],columns=["ages"])
df

python-数据分析(10-数据清洗)_第2张图片

#to_replace旧数据  value新数据
df.replace(to_replace=63,value=20)

python-数据分析(10-数据清洗)_第3张图片

#也可以直接替换多行数据
df.replace(to_replace=[65,63],value=10)

#同上,但是改变对应位置数值
df.replace(to_replace=[65,63],value=[10,20])


#也可以通过字典的方式进行替换
df.replace({63:5,32:10})

python-数据分析(10-数据清洗)_第4张图片
python-数据分析(10-数据清洗)_第5张图片

10.2 处理重复数据

判断重复值

  • df.duplicated(subset=None, keep=‘first’) 返回的一个布尔值Series 默认反映的是每一行是否与之前出现过的行相同
    • subset 指定子列判断重复
    • keep 默认为first保留首个出现的 last保留最后出现的

python-数据分析(10-数据清洗)_第6张图片

删除重复值

  • df.drop_duplicates() 返回的是DataFrame 默认删除重复行
    • subset 指定的数据任何子集是否有重复
    • keep 默认为first保留首个出现的 last保留最后出现的

python-数据分析(10-数据清洗)_第7张图片

10.3 离散化

离散化是把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。
可以简单的理解为离散化就是将连续值进行分区间。

  • pd.cut(x,bins) 将连续数据x进行离散化
    • x 要进行离散化的数据
    • bins 分组
  • pd.value_counts(cates) 统计每个区间的数值分布

python-数据分析(10-数据清洗)_第8张图片
python-数据分析(10-数据清洗)_第9张图片

10.4 利用映射转换数据

使用:df[“列标签”].map(“映射到的数据”)

需求:如下数据。进行分班
• 一班:胡歌,小岳岳,林更新
• 二班:金世佳,郭麒麟

data = {
    "names":["胡歌","金世佳","林更新","郭麒麟","小岳岳"],
    "grades":np.random.randint(1,100,size=5)
}
df = pd.DataFrame(data)

python-数据分析(10-数据清洗)_第10张图片
python-数据分析(10-数据清洗)_第11张图片


重命名轴索引
使用:

  • 索引映射:df.index.map()
  • 索引重命名:df.rename(index,columns)
    python-数据分析(10-数据清洗)_第12张图片
    python-数据分析(10-数据清洗)_第13张图片
    向量化字符串函数
    python-数据分析(10-数据清洗)_第14张图片

练习:读取 catNames2.csv ,找到所有的使用次数超过700并且名字的字符串的长度大于4的动物的名字
python-数据分析(10-数据清洗)_第15张图片

10.5 计算虚拟变量

将分类变量转换为"虚拟"或"指标"矩阵是另一种用于统计建模或机器学习的转换操作。如果DataFrame中的一列有k个不同的值,则可以衍生一个K列的值为1和0的矩阵或DataFrame。

  • pd.get_dummies() 将分类变量转换为"虚拟"或"指标"矩阵
    python-数据分析(10-数据清洗)_第16张图片

练习
读取IMDB-Movie-Data.csv对其分类(Genre)这列转化为虚拟矩阵。
python-数据分析(10-数据清洗)_第17张图片
python-数据分析(10-数据清洗)_第18张图片
python-数据分析(10-数据清洗)_第19张图片
python-数据分析(10-数据清洗)_第20张图片
(最后的理解有点难,可以多看下)

你可能感兴趣的:(matlab,数据分析,python)