4-Pandas数据预处理之数据转换(df.map()、df.replace())
在数据分析中,根据需求,有时候需要将一些数据进行转换,而在Pandas中,实现数据转换的常用方法有:
- 利用函数或是映射
- 可以将自己定义的或者是其他包提供的函数用在Pandas对象上实现批量修改。
- applymap和map实例方法
在本节中,使用调查的某公司的员工信息为例:
numeber_project:员工所在项目个数
left:该员工是否离职
salary:工资级别
>>> import pandas as pd
>>> import numpy as np
>>> data = pd.read_csv('./input/HR.csv',encoding = 'gbk')
>>> data = data[['number_project','left','salary']]
>>> data.head()
number_project left salary
0 2 1 low
1 5 1 medium
2 7 1 medium
3 5 1 low
4 2 1 low
一、map()、replace()
(1)使用函数。例:将salary列的数据转换成每个单词的字母大写:
>>> data['salary'].map(str.title)[:5]
0 Low
1 Medium
2 Medium
3 Low
4 Low
Name: salary, dtype: object
(2)使用映射关系的字典。例:对于left,生成一个指标标量indicator。若为‘YES’,表示left=1,若为‘NO’,表示left=0(一般在数据处理时是将字符处理成0,1...n,在此时为了便于理解,故如此举例)。
>>> mapper = {0:'NO',1:'YES'}
>>> data['left'] = data['left'].map(mapper)
>>> data.head()
number_project left salary
0 2 YES Low
1 5 YES Medium
2 7 YES Medium
3 5 YES Low
4 2 YES Low
注意:使用映射关系的字典map()必须考虑到所有的值,若没有,那么没有映射关系的值将会为NaN,如下例子:
>>> s = pd.Series(['A','B','C'])
>>> s
0 A
1 B
2 C
dtype: object
>>> s.map({'A':10,'B':100})
0 10.0
1 100.0
2 NaN
dtype: float64
(3)重命名索引---->通过map方法可以对行索引或是列名的Index对象进行修改(行索引和列明都是Index对象)
>>> data.columns
Index(['number_project', 'left', 'salary'], dtype='object')
>>> data.columns.map(str.upper)
Index(['NUMBER_PROJECT', 'LEFT', 'SALARY'], dtype='object')
(4)使用映射,若需要将数据按照一定的映射关系进行替换,使用replace()。多个值的替换可以用列表,少数的值可以用包含映射关系的字典字典。
例:将number_project的值2、3、4设置为less,5、6、7设置为More。
>>> data['number_project'] = data['number_project'].replace([2,3,4,5,6,7],['Less','Less','Less','More','More','More'])
>>> data.head()
number_project left salary
0 Less YES Low
1 More YES Medium
2 More YES Medium
3 More YES Low
4 Less YES Low
现有一份数据test_loan,如下:
| user | term | int_rate | grade | loan_status | |
|---|---|---|---|---|---|
| 389 | 8 | 36 months | 13.66% | C | Fully Paid |
| 417 | 9 | 36 months | 11.99% | B | Charged Off |
| 705 | 6 | 60 months | 15.59% | D | Fully Paid |
| 921 | 7 | 60 months | 11.44% | B | Fully Paid |
| 1138 | 4 | 36 months | 13.66% | C | Fully Paid |
| 1251 | 5 | 36 months | 13.66% | C |
Charged Off |
1)loan_status状态为"Charged Off"的贷款有违约风险,视为不良贷款,将其值标记为1,其他贷款标记为0。我们使用replace()进行值替换
test_loan['loan_status']=test_loan['loan_status'].replace(["Charged Off","Fully Paid"],[1,0])
user term int_rate grade loan_status
389 8 36 months 13.66% C 0
417 9 36 months 11.99% B 1
705 6 60 months 15.59% D 0
921 7 60 months 11.44% B 0
1138 4 36 months 13.66% C 0
1251 5 36 months 13.66% C 1
2)replace()也可以同时指定不同变量的不同值替换为相同新值
test_loan.replace(to_replace={'loan_status':0,'grade':'B'},value='Good')
user term int_rate grade loan_status
389 8 36 months 13.66% C Good
417 9 36 months 11.99% Good Charged Off
705 6 60 months 15.59% D Good
921 7 60 months 11.44% Good Good
1138 4 36 months 13.66% C Good
1251 5 36 months 13.66% C Charged Off
说明:to_replace指需要替换的值,value指要替换成的新值。replace作为数值替换的方法,适用范围非常之广,可以实现多种操作。
3)也可以使用正则进行替换,设置regex=True即可,代表to_replace部分输入的是正则表达式部分
例:将D开头的全部内容替换成Bad
test_loan.replace(to_replace='D+.*$',value='Bad',regex=True) user term int_rate grade loan_status
389 8 36 months 13.66% C Fully Paid
417 9 36 months 11.99% B Charged Off
705 6 60 months 15.59% Bad Fully Paid
921 7 60 months 11.44% B Fully Paid
1138 4 36 months 13.66% C Fully Paid
1251 5 36 months 13.66% C Charged Off
4-Pandas数据预处理之数据转换(df.map()、df.replace())的更多相关文章
- Python的工具包[1] -> pandas数据预处理 -> pandas 库及使用总结
pandas数据预处理 / pandas data pre-processing 目录 关于 pandas pandas 库 pandas 基本操作 pandas 计算 pandas 的 Series ...
- pandas 数据预处理
pandas 数据预处理 缺失数据处理 csv_data=''' A,B,C,D 1.0,2.0,3.0,4.0 5.6,6.0,,8.0 0.0,11.0,12.0,,''' import pand ...
- 基于pandas数据预处理基础操作
# -*- coding: utf-8 -*- import numpy as np import pandas as pd #一.创建数据 #1.通过传递一个list对象来创建一个Series,pa ...
- 【新人赛】阿里云恶意程序检测 -- 实践记录10.20 - 数据预处理 / 训练数据分析 / TF-IDF模型调参
Colab连接与数据预处理 Colab连接方法见上一篇博客 数据预处理: import pandas as pd import pickle import numpy as np # 训练数据和测试数 ...
- 基于pandas进行数据预处理
很久没用pandas,有些有点忘了,转载一个比较完整的利用pandas进行数据预处理的博文:https://blog.csdn.net/u014400239/article/details/70846 ...
- 使用pandas进行数据预处理01
数据预处理有四种技术:数据合并,数据清洗,数据标准化,以及数据转换. 数据合并技术:(1)横向或纵向堆叠合数据 (2)主键合并数据 (3)重叠合并数据 1.堆叠合并数据: 堆叠就是简单的把两个表拼接在 ...
- 小白学 Python 数据分析(9):Pandas (八)数据预处理(2)
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 数据预处理 | 使用 Pandas 进行数值型数据的 标准化 归一化 离散化 二值化
1 标准化 & 归一化 导包和数据 import numpy as np from sklearn import preprocessing data = np.loadtxt('data.t ...
- python数据分析之pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
1 引言 Pandas是作为Python数据分析著名的工具包,提供了多种数据选取的方法,方便实用.本文主要介绍Pandas的几种数据选取的方法. Pandas中,数据主要保存为Dataframe和Se ...
随机推荐
- C#析构函数(方法)
析构方法是在垃圾回收.释放资源时使用的.析构函数用于析构类的实例.备注: 不能在结构中定义析构函数.只能对类使用析构函数. 一个类只能有一个析构函数. 无法继承或重载析构函数. ...
- AcWing 207. 球形空间产生器
传送门 思路: 设球心坐标为(x1,x2,...,xn),有 ,由此我们可以列出N+1个二次方程,我们可以对前后两个方程做差,来得到N个一次方程,同时可以消掉常数C,第i个方程即 那么我们就可以直接采 ...
- 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)
前言: 本篇文章主要讲解的是在学习人工智能之深度学习时所学到的知识和需要的环境配置(安装Anaconda3和TensorFlow2步骤详解),以及个人的心得体会,汇集成本篇文章,作为自己深度学习的总结 ...
- LeetCode-016-最接近的三数之和
最接近的三数之和 题目描述:给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只 ...
- xor加密的python实现
#md5加密 import hashlib hash_md5 = hashlib.md5() x=input("Please input your text:") print( & ...
- CDN网络科普小文(小说版)
引言 作为公司 cdn 小组的一名小码仔,我为写一篇 cdn 的科普文章准备了好一段时间(大概有一个多月没有更新我的社交账号了). 在我刚进入公司,培训完,进入小组,了解到我们做的是 cdn 相关的工 ...
- tp5 (自写) 实现redis消息队列 + 排行榜
1:小皮开启redis, 控制器按Ctrl 点击new Redis 进入 redis.php 进行封装 //向队列添加数据 // LPUSH key value1 [value2] //将一个或多个值 ...
- Laravel-多条件检索方案
控制器 public function index(Request $request) { $status = $request->input('status'); $title = $requ ...
- CF258D题解
太厉害啦 首先做期望题最不能忘记的就是期望的线性性. 所以我们直接将全局逆序对对数拆成两个数其中一个比另一个大的期望(概率),设为 \(f[i][j]\),初值为 \([a_i>b_j]\). ...
- Spring Boot 中初始化资源的几种方式
假设有这么一个需求,要求在项目启动过程中,完成线程池的初始化,加密证书加载等功能,你会怎么做?如果没想好答案,请接着往下看.今天介绍几种在Spring Boot中进行资源初始化的方式,帮助大家解决和回 ...