python数据分析(六)—数据清洗2
数据转换
1.重复数据的移除
duplicated:返回的是Series,输出值为bool值并且True表重复行。
drop_duplicates:返回的是DataFrame,输出的是去除了重复行的新对象,默认保留按照顺序下来第一个遇到的序列。对象名.drop_duplicates([‘列名’]):是对指定部分列进行重复判断,从而过滤指定列中重复出现的项。
对象名.drop_duplicates([‘列名’], keep=‘last’):keep='last’表示保留重复行最后一个。
import pandas as pd
import numpy as np
from pandas import DataFrame, Series
frame = pd.DataFrame({'k1': ['age', 'year'] * 3 + ['year'], 'k2': [1, 1, 2, 3, 3, 4, 4]})
frame
# 输出为k1 k2
0 age 1
1 year 1
2 age 2
3 year 3
4 age 3
5 year 4
6 year 4frame.duplicated() # 表示各行是否是重复行
# 输出为
0 False
1 False
2 False
3 False
4 False
5 False
6 True
dtype: boolframe.drop_duplicates() # 删除重复行并且穿重复的数组会被标为False
# 输出为k1 k2
0 age 1
1 year 1
2 age 2
3 year 3
4 age 3
5 year 4frame['k3'] = range(7) # 对象增加新的一列
frame.drop_duplicates(['k1']) # 根据k1列过滤重复项
# 输出为k1 k2 k3
0 age 1 0
1 year 1 1frame.drop_duplicates(['k1', 'k2'], keep='last') # 传入keep='last’则保留最后一个
# 输出为k1 k2 k3
0 age 1 0
1 year 1 1
2 age 2 2
3 year 3 3
4 age 3 4
6 year 4 6
2.用函数或者映射进行数据转换map()
map() 函数是作用于 Series 或 DataFrame 对象的一列,并可以接受函数或含有映射关系的字典型对象。使用map是一种实现元素级转换以及其他数据清理工作的便捷方式。
语法格式为:Series.map(arg,na_action=None)
函数中的参数说明以下:arg:接收 function、dict 或 Series,表示映射关系;
na_action:类似R中的na.action,取值为None或ingore,用于控制遇到缺失值的处理方式,设置为ingore时串行运算过程中将忽略Nan值原样返回。
- 通过数据字典映射
map()方法接受数据字典参数,通过数据字典将数据进行映射。
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
# 编写一个不同肉类到动物的映射
meat_to_animal = {'bacon': 'pig','pulled pork': 'pig','pastrami': 'cow','corned beef': 'cow','honey ham': 'pig','nova lox': 'salmon'
}
lowercased = data['food'].str.lower() #使用Series的str.lower方法,将各个值转换为小写
# lowercased
data['animal'] = lowercased.map(meat_to_animal)
data
# 输出为food ounces animal
0 bacon 4.0 pig
1 pulled pork 3.0 pig
2 bacon 12.0 pig
3 Pastrami 6.0 cow
4 corned beef 7.5 cow
5 Bacon 8.0 pig
6 pastrami 3.0 cow
7 honey ham 5.0 pig
8 nova lox 6.0 salmon
- lambda函数映射
map()方法可以用lambda函数的方式进行值的映射。
data['food'].map(lambda x: meat_to_animal[x.lower()])
# 输出为
0 pig
1 pig
2 pig
3 cow
4 cow
5 pig
6 cow
7 pig
8 salmon
Name: food, dtype: object
- 通用函数映射
map()方法还可以接收自定义通用的函数进行值的映射。
data_frame = pd.DataFrame({'student_id':['ox1', 'ox2', 'ox3', 'ox4', 'ox5', 'ox6'], 'language_score':[90, 88, 96, 89, 97, 99]})
# data_frame
def score(x):score_class='良好'if x>95:score_class='优秀'return score_classdata_frame['等级']=data_frame['language_score'].map(score)
data_frame
# 输出为student_id language_score 等级
0 ox1 90 良好
1 ox2 88 良好
2 ox3 96 优秀
3 ox4 89 良好
4 ox5 97 优秀
5 ox6 99 优秀
3.替换值replace()
如果要对全DataFrame或者是Series数据集中的数据进行某种替换,map()可能需要对数据集中的每个列都进行map()操作才可以,但是replace方法可以一次性替换掉DataFrame或者是Series中所有的数据。
单值替换:
对象.replace(要替换的值,替换值)
多值替换:
对象.replace([要替换的值列表],替换值)
对象.replace([要替换的值列表],[替换值列表])
对象.replace({要替换的值:替换值})
- 通过fillna方法填充缺失值来看作替换值的一种特殊情况
data = pd.Series([1., -999., 2., -999., -1000., 3.])
# data
data.replace(-999, np.nan) # 用replace来产生一个新的Series(除非传入inplace=True)
# 输出为
0 1.0
1 NaN
2 2.0
3 NaN
4 -1000.0
5 3.0
dtype: float64data.replace([-999, -1000], np.nan) # 一次性替换多个值,要替换的值组成列表和一个替换值
# 输出为
0 1.0
1 NaN
2 2.0
3 NaN
4 NaN
5 3.0
dtype: float64data.replace([-999, -1000], [np.nan, 0]) # 让每个值有着不同的替换值,可以传递一个替换列表
data.replace({-999: np.nan, -1000: 0}) # 传入的参数也可以是字典
# 输出为
0 1.0
1 NaN
2 2.0
3 NaN
4 0.0
5 3.0
dtype: float64
4.重命名rename()
在数据处理的过程有时候需要对列索引或是行索引进行重命名。
列索引:对象.rename(columns={‘原索引’:‘重命名索引’}) ,一个典型的例子就是对于数据的检索或其他操作对象[column] 对于任意列名均有效,但是 对象.column只在列名是有效的Python变量名时才有效。
行索引:对象.rename(index={‘原索引’:‘重命名索引’})的方式进行重命名。
行和列同时索引:对象.rename(index={‘原索引’:‘重命名索引’},columns={‘原索引’:‘重命名索引’} )
# 举一个例子
data = pd.DataFrame(np.arange(12).reshape((3, 4)),index=['Ohio', 'Colorado', 'New York'],columns=['one', 'two', 'three', 'four'])
transform = lambda x: x[:4].upper()
data.index.map(transform) # 轴索引也有一个map方法
# 输出为
Index(['OHIO', 'COLO', 'NEW '], dtype='object')data.index = data.index.map(transform) # 赋值给index,对DataFrame进行就地修改
data
# 输出为one two three four
OHIO 0 1 2 3
COLO 4 5 6 7
NEW 8 9 10 11 data.rename(index=str.title, columns=str.upper) # 想要创建数据集的转换版(而不是修改原始数据)ONE TWO THREE FOUR
Ohio 0 1 2 3
Colo 4 5 6 7
New 8 9 10 11
- inplace=True参数用于更新作用于本数据集,而不是返回一个新的数据集
- 列索引
data.rename(columns={'one': 'one_1'}, inplace=True)
data.query('one_1 > 0') # 查询one_1大于0的数据
# 输出为one_1 two three four
COLO 4 5 6 7
NEW 8 9 10 11若出现python变量命名不规范,就会出现data.columns调用时报列名不是有效的python变量名
data.rename(columns={'one': '一'}, inplace=True)
data.query('一 > 0')
# 报错为:UndefinedVariableError: name '一' is not defined
- 行索引
data.rename(index={'New York': 'New_index'}, inplace=True)
data
# 输出为one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
New_index 8 9 10 11
- 同时索引
data.rename(index={'OHIO': 'INDIANA'},columns={'three': 'peekaboo'}) # rename可以结合字典型对象实现对部分轴标签的更新
# 输出为one two peekaboo four
INDIANA 0 1 2 3
COLO 4 5 6 7
NEW 8 9 10 11
5.检测和过滤异常值
异常值的检测和过滤运算在很大程度上就是数组运算。
对象[np.函数方法(对象)]
data = pd.DataFrame(np.random.randn(1000, 4))
# data
# data.describe()
col = data[2] # 输出一个Series
col[np.abs(col) > 3] # 输出某列中绝对值大小超过3的值
data[(np.abs(data) > 3).any(1)] # 输出绝对值大于3,用any(1)方法来输出含有-3的值
data[np.abs(data) > 3] = np.sign(data) * 3 # 将值限制在区间-3到3以内
# data.describe()
np.sign(data).head() # np.sign(data)可以生成1和-1的值
6.计算指标/哑变量
一种常用于统计建模或机器学习的转换方式是:将分类变量(categorical variable)转换为“哑变量”或“指标矩阵”。
- 哑变量
加前缀:pd.get_dummies(对象[‘指标’], prefix=‘前缀’) 将指标中所有变量名都加上前缀。
插入原对象前面:对象的列名.jion(要插入的对象)
df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'],'data1': range(6)})
# df
pd.get_dummies(df['key']) # 按照index顺序下来,出现为1,不出现为0
dummies = pd.get_dummies(df['key'], prefix='key')
# dummies
df[['data1']].join(dummies) # 将新的一列插入到原对象前面
# dummies['data1'] = range(6) # 普通插入列项,插入到原对象的后面
# 输出为data1 key_a key_b key_c
0 0 0 1 0
1 1 0 1 0
2 2 1 0 0
3 3 0 0 1
4 4 1 0 0
5 5 0 1 0
- 对统计应用:结合get_dummies和其它pandas方法如pandas.cut()的离散化函数
np.random.seed(1234) # 设置seed函数参数后,无论执行多少次随机函数都相等
values = np.random.rand(10)
values
# 输出为
'''
array([0.35781727, 0.50099513, 0.68346294, 0.71270203, 0.37025075,0.56119619, 0.50308317, 0.01376845, 0.77282662, 0.88264119])
'''
abs = [0, 0.2, 0.4, 0.6, 0.8, 1]
pd.get_dummies(pd.cut(values, abs)) # pd.cut离散化函数,在这里把abs的值分成不同的值域
# 输出为(0.0, 0.2] (0.2, 0.4] (0.4, 0.6] (0.6, 0.8] (0.8, 1.0]
0 0 1 0 0 0
1 0 0 1 0 0
2 0 0 0 1 0
3 0 0 0 1 0
4 0 1 0 0 0
5 0 0 1 0 0
6 0 0 1 0 0
7 1 0 0 0 0
8 0 0 0 1 0
9 0 0 0 0 1
np.random.seed()函数中的参数可以选择任何一个数,它的功能是使设有相同参数的seed函数之后的随机数都相等。
python数据分析(六)—数据清洗2相关推荐
- python数据分析六个环节_安利6个珍藏的Python数据分析神器
作者:东哥起飞 出品:Python数据科学 用Python处理数据大家都不陌生了,属常规操作,但常规之下还是也有些暗藏技巧的,本篇东哥分享6个好玩高效的操作,帮助大家提高效率. 一.Pandas Pr ...
- Python数据分析5——数据清洗
目录 Python数据清洗 数据清洗介绍 处理缺失值 判断数据是否为NaN 过滤缺失值 补全缺失值 异常值 处理重复数据 判断重复值 删除重复值 离散化 向量化字符串函数 Python数据清洗 数据清 ...
- Python 数据分析三剑客之 Pandas(六):GroupBy 数据分裂、应用与合并
CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...
- Python 数据分析三剑客之 Matplotlib(六):直方图 / 柱状图 / 条形图的绘制
CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...
- Python 数据分析三剑客之 NumPy(六):矩阵 / 线性代数库与 IO 操作
CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...
- 【Python数据分析】数据预处理1——数据清洗
在数据挖掘过程中,数据预处理过程是占比很大的一部分工作 数据预处理过程主要有以下几个部分 1.数据清洗--2.数据集成--3.数据变换--4.数据规约 本文介绍数据清洗部分 一.缺失值分析与处理 1. ...
- 数据载入、存储及文件格式——《利用python数据分析》第六章学习
数据载入.存储及文件格式--<利用python数据分析>第六章学习 前言 这次带来第六章的学习笔记,希望这次效率高点,快点写完. 代码环境这次小升级,Pycharm 2021.3 + An ...
- Python 数据分析第六期--文本数据分析
Python 数据分析第六期–文本数据分析 1. Python 文本分析工具 NLTK NLTK (Natural Language Toolkit) NLP 领域最常用的一个 Python 库 , ...
- Python 数据分析微专业课程--项目03 视频网站数据清洗整理和结论研究
1.项目说明 读取爱奇艺网站数据,对数据进行清洗和整理,分析不同导演电影的好评率, 对2001-2016电影影评人数分析,筛选出当年热门电影 2.项目具体要求 数据清洗 - 去除空值;时间标签转化 分 ...
最新文章
- python使用sklearn中的make_blobs函数生成聚类(clustering)分析需要的仿真数据、matplotlib可视化生成的仿真数据
- detector = dlib.get_frontal_face_detector()获取人脸框的用法
- OpenCV文字绘制函数putText()的使用
- HttpClientFactory的套路,你知多少?
- Samba将Linux集成到Windows网络
- php中获取本月第二天,php第二天
- C++primer第九章 顺序容器 9.3 顺序容器操作
- C++ STL 使用assign对list中的元素进行重置
- 基于Android的数据采集系统,一种基于Android的新型用户数据采集发送系统
- 孤岛惊魂4服务器稳定吗,《孤岛惊魂5》究竟好不好玩 让我来告诉你(缺点)
- 计算机组成原理统一试卷,计算机组成原理试卷(含答案).doc
- ISO_7637-1/2/3/4/5标准各部分修订状态汇总(Road vehicles-Electrical disturbances from conduction and coupling)
- 基于Nonebot2搭建QQ机器人(二)编写一个自动回复插件
- 5G无线增强设计与国际标准 个人整理(PDF和Word)
- 牵手爱情,绎一份不了情缘
- 微服务Spring Boot 整合 Redis 实现好友关注 – Feed流实现推送到粉丝收件箱
- ios安装app提示【未受信任的企业级开发者】。在设置中信任此开发者
- TCP连接异常终止(RST包)场景分析
- 霍志刚中国科学院计算机,曙光4000系列高性能计算机研究集体
- UNRAID挂载exFat格式的USB磁盘后续(自动挂载)