数据转换

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值原样返回。

  1. 通过数据字典映射
    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
  1. 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
  1. 通用函数映射
    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)转换为“哑变量”或“指标矩阵”。

  1. 哑变量

加前缀: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
  1. 对统计应用:结合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相关推荐

  1. python数据分析六个环节_安利6个珍藏的Python数据分析神器

    作者:东哥起飞 出品:Python数据科学 用Python处理数据大家都不陌生了,属常规操作,但常规之下还是也有些暗藏技巧的,本篇东哥分享6个好玩高效的操作,帮助大家提高效率. 一.Pandas Pr ...

  2. Python数据分析5——数据清洗

    目录 Python数据清洗 数据清洗介绍 处理缺失值 判断数据是否为NaN 过滤缺失值 补全缺失值 异常值 处理重复数据 判断重复值 删除重复值 离散化 向量化字符串函数 Python数据清洗 数据清 ...

  3. Python 数据分析三剑客之 Pandas(六):GroupBy 数据分裂、应用与合并

    CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...

  4. Python 数据分析三剑客之 Matplotlib(六):直方图 / 柱状图 / 条形图的绘制

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  5. Python 数据分析三剑客之 NumPy(六):矩阵 / 线性代数库与 IO 操作

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  6. 【Python数据分析】数据预处理1——数据清洗

    在数据挖掘过程中,数据预处理过程是占比很大的一部分工作 数据预处理过程主要有以下几个部分 1.数据清洗--2.数据集成--3.数据变换--4.数据规约 本文介绍数据清洗部分 一.缺失值分析与处理 1. ...

  7. 数据载入、存储及文件格式——《利用python数据分析》第六章学习

    数据载入.存储及文件格式--<利用python数据分析>第六章学习 前言 这次带来第六章的学习笔记,希望这次效率高点,快点写完. 代码环境这次小升级,Pycharm 2021.3 + An ...

  8. Python 数据分析第六期--文本数据分析

    Python 数据分析第六期–文本数据分析 1. Python 文本分析工具 NLTK NLTK (Natural Language Toolkit) NLP 领域最常用的一个 Python 库 , ...

  9. Python 数据分析微专业课程--项目03 视频网站数据清洗整理和结论研究

    1.项目说明 读取爱奇艺网站数据,对数据进行清洗和整理,分析不同导演电影的好评率, 对2001-2016电影影评人数分析,筛选出当年热门电影 2.项目具体要求 数据清洗 - 去除空值;时间标签转化 分 ...

最新文章

  1. python使用sklearn中的make_blobs函数生成聚类(clustering)分析需要的仿真数据、matplotlib可视化生成的仿真数据
  2. detector = dlib.get_frontal_face_detector()获取人脸框的用法
  3. OpenCV文字绘制函数putText()的使用
  4. HttpClientFactory的套路,你知多少?
  5. Samba将Linux集成到Windows网络
  6. php中获取本月第二天,php第二天
  7. C++primer第九章 顺序容器 9.3 顺序容器操作
  8. C++ STL 使用assign对list中的元素进行重置
  9. 基于Android的数据采集系统,一种基于Android的新型用户数据采集发送系统
  10. 孤岛惊魂4服务器稳定吗,《孤岛惊魂5》究竟好不好玩 让我来告诉你(缺点)
  11. 计算机组成原理统一试卷,计算机组成原理试卷(含答案).doc
  12. ISO_7637-1/2/3/4/5标准各部分修订状态汇总(Road vehicles-Electrical disturbances from conduction and coupling)
  13. 基于Nonebot2搭建QQ机器人(二)编写一个自动回复插件
  14. 5G无线增强设计与国际标准 个人整理(PDF和Word)
  15. 牵手爱情,绎一份不了情缘
  16. 微服务Spring Boot 整合 Redis 实现好友关注 – Feed流实现推送到粉丝收件箱
  17. ios安装app提示【未受信任的企业级开发者】。在设置中信任此开发者
  18. TCP连接异常终止(RST包)场景分析
  19. 霍志刚中国科学院计算机,曙光4000系列高性能计算机研究集体
  20. UNRAID挂载exFat格式的USB磁盘后续(自动挂载)

热门文章

  1. 安徽师大附中%你赛day4T1 金字塔 解题报告
  2. 【4分频电路 -verilog】
  3. Balanced Multimodal Learning via On-the-fly Gradient Modulation论文笔记
  4. 记一次react项目部署之后页面加载极度缓慢的问题
  5. SAP中新增移动类型科目确定配置处理实例
  6. 【C/C++练习题】斐波那契数列
  7. 丙烯酸酯PEG丙烯酸酯,DA-PEG-DA
  8. 华为云数据库三大优势
  9. 文明之剑-我读王晋康科幻小说
  10. 基于webScoket的在线客服聊天