开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践:Pandas 数据预处理-上】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15388
Pandas 数据预处理-上
内容简介:
一、处理缺失数据值
二、删除重复值
三、Transforming Data Using a Function or Mapping
一、处理缺失数据值
接下来继续学习pandas的有关内容,同学们按照提供的文件学习pandas数据读取的有关内容,
对第三部分pandas数据预处理部分内容进行讲解,在讲课之前同学们看一下这样的开发环境:JupyterLab,
大家看一下左上角,对于刚开始使用浏览器这样的交互方式的话,可能比较喜欢它,对于长时间使用Jupyter notebook的同学,转过来可能还要在适应一下,但是对于开始使用的同学来说可能很喜欢JupyterLab,大家看一下他左边的导航也很清晰,不像Jupyter notebook很混乱。
Pandas数据预处理的两个内容:第一部分是处理缺失数据值和空值等等,不做详细讲解,具体根据提供的notebook文件自学。
二、删除重复值
import pandas as pd
import numpy as np
data = pd.DataFrame({‘k1’:[ ‘one’,‘two ’]*3+[‘two’],
‘k2’:[1,1,2,3,3,4,4]})
data
k1 k2
0 one 1
1 two 1
2 one 2
3 two 3
4 one 3
5 two 4
6 two 4
加载数据值,运行后观察数据框两列k1和k2,数据框里面有一个函数duplicated返回的是一个boolean Series,表示一个行是否有重复值,主要根据前一行来判断,运行一下:
0 False
1 False
2 False
3 False
4 False I
5 False
6 True
dtype:bool
运行结果发现最后一行为true,这表示最后一行有重复值。
可以用drop_duplicates删除重复值,再返回一个数据框:
Data. drop_duplicates()
k1 k2
0 one 1
1 two 1
2 one 2
3 two 3
4 one 3
5 two 4
运行后发现最后一行被删
除了,运行结果也是一个框。
上面两种方法都默认考虑所有列,另外我们可以指定一部分来检测重复值。假设检测k1列的重复值:
data[‘v1’]=range(7)
data
k1 k2 v1
0 one 1 0
1 two 1 1
2 one 2 2
3 two 3 3
4 one 3 4
5 two 4 5
6 two 4 6
在date框里加一个v1 ,显示一下,加了一个新列v1。
data.drop_duplicates([‘k1’])
k1 k2 v1
0 one 1 0
1 two 1 1
duplicated 和drop_duplicates默认保留第一次观测到的数据组合。设置keep=´last´能返回最后一个:
data.drop_duplicates([‘k1’,‘k2’],keep=’last’)
k1 k2 v1
0 one 1 0
1 two 1 1
2 one 2 2
3 two 3 3
4 one 3 4
6 two 4 6
三、Transforming Data Using a Function or Mapping
(用函数和映射来转换数据)
有时候我们可能希望做一些数据转换。比如下面一个例子,有不同种类的肉:
data = pd.DataFrame({‘food’:[‘bacon’, ‘pulled pork’, ‘bacon’,
‘Pastrami’, ‘corned beef’, ‘Bacon’,
‘pastrami’, ‘honey ham’, ‘nova lox’],
‘ounces’:[4, 3,12,6,7.5,8,3,5,6]})
data
数据框一列是food,一列是ounces,共有九条记录,
food ounces
0 bacon 4.0
1 pulled pork 3.0
2 bacon 12.0
3 Pastrami 6.0
4 corned beef 7.5
5 Bacon 8.0
6 pastrami 3.0
7 honey ham 5.0
8 nova lox 6.0
假设希望加一列,表明每种肉来源的动物是什么,
meat_to_animal={
‘bacon’: ‘pig’,
‘pulled pork’: ‘pig’,
‘pastrami’: ‘cow’,
‘corned beef’: ‘cow’,
‘honey ham’: ‘pig’,
‘nova lox’: ‘salmon’
}
用于series的map方法接受一个函数,或是一个字典,包含着映射关系,但这里有一个小问题,有些肉是大写,有些是小写。因此,我们先用str.lower把所有的值变为小写,在pandas里面str.lower很重要。
lowercased=data[‘food’].str.lower()
lowercased
0 bacon
1 pulled pork
2 bacon
3 pastrami
4 corned beef
5 bacon
6 pastrami
7 honey ham
8 nova lox
Name:food,dtype:object
data[‘animals’] = lowercased.map(meat_to_animal)
//做映射
Data
执行一下,增加了新的一列animal。
food ounces animal