技术笔记:pandasreplace()替换用法

简介: 技术笔记:pandasreplace()替换用法

2021.02.05补充


之前写的替换都是整个值,也即是说如果被替换值='asdfg',之前的只有值等于='asdfg',才可以被替换,但是我们很多时候是值想替换局部的,比如说‘深圳地区’,替换为‘深圳市’,那么就得先str,代码如下:


main_copy【'city'】=main_copy【'city'】.str.replace('地区','市')


====================================================================


replace()


既可以替换某列,也可以替换某行,还可以全表替换


df.replace() 或者 df【col】replace()


#参数如下:


df.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad',)


参数说明:


to_replace:被替换的值


value:替换后的值


inplace:是否要改变原数据,False是不改变,True是改变,默认是False


limit:控制填充次数


regex:是否使用正则,False是不使用,True是使用,默认是False


method:填充方式,pad,ffill,bfill分别是向前、向前、向后填充


import pandas as pd


import numpy as np


#构造数据


df=pd.DataFrame({'a':【'?',7499,'?',7566,7654,'?',7782】,'b':【'SMITH', '.','$','.' ,'MARTIM','BLAKE','CLARK'】,


'c':【'CLERK','SALESMAN','$','MANAGER','$','MANAGER','$'】,


'd':【7902,7698,7698,7839,7698,7839,7839】,


'e':【'1980/12/17','1981/2/20','1981/2/22','1981/4/2','1981/9/28','1981/5/1','1981/6/9'】,


'f':【800,1600,1250,2975,1230,2859,2450】,


'g':【np.nan,300.0,500.0,np.nan,1400.0,np.nan,np.nan】,


'h':【20,30,30,20,30,30,10】})


#替换全部或者某行某列


#全部替换,这二者效果一样


df.replace(20,30)


df.replace(to_replace=20,value=30)


#某一列或者某几列


df【'h'】.replace(20,30)


df【【'b','c'】】.replace('$','rmb')


#某一行或者几行


df.iloc【1】.replace(1600,1700)


df.iloc【1:3】.replace(30,40)


#inplace=True


df.replace(20,30,inplace=True)


df.iloc【1:3】.replace(30,40,inplace=True)


#用list或者dict进行单值或者多值填充,


#单值


#注意,list是前者替换后者,dict字典里的建作为原值,字典里的值作为替换的新值


df.replace(【20,30】)


df.replace({20:30})


#多值,list是list逗号后的值替换list的值,dict字典里的建作为原值,字典里的值作为替换的新值


df.replace(【20,1600】,【40,1700】) #20被40替换,1600被1700替换


df.replace(【20,30】,'b') #20,30都被b替换


df.replace({20:30,1600:1700})


df.replace({20,30},{'a','b'}) #这个和list多值用法一样


#,method


#其实只需要传入被替换的值,


df.replace(【'a',30】,method='pad')


df.replace(【'a',30】,method='ffill')


df.replace(【'a',30】,method='bfill')


#可以直接这样表达


df.replace(30,method='bfill') #用30下面的最靠近非30的值填充


df.replace(30,method='ffill') #用30上面最靠近非30的值填充


df.replace(30,method='pad') #用30上面最靠近非30的值填充


#一般用于空值填充


df.replace(np.nan,method='bfill')


#limit


df.replace(30,method='bfill',limit=1) #现在填充的间隔数


正则替换的需要先补充一下正则表达式


#正则替换


#转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\表示的字符就是\


#如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义


df.replace(r'\?|.|\$',np.nan) #和原来没有变化


df.replace(r'\?|.|\$',np.nan,regex=True)#用np.nan替换?或.或$原字符


df.replace(【r'\?',r'\$'】,np.nan,regex=True)#用np.nan替换?和$


df.replace(【r'\?',r'\$'】,【np.nan,'NA'】,regex=True)#用np.nan替换?用NA替换$符号


df.replace(regex={r'\?':None})


#当然,如果不想使用inplace=True,也可以这样子表达


df=df.replace(20,30)


df.replace(20,30,inplace=True)


全部代码如下:


# -- coding: utf-8 --


"""


Created on Tue Jul 21 10:52:00 2020


@author: Admin


"""


import pandas as pd


import numpy as np


#构造数据


df=pd.DataFrame({'a':【'?',7499,'?',7566,7654,'?',7782】,'b':【'SMITH', '.','$','.' ,'MARTIM','BLAKE','CLARK'】,


'c':【'CLERK','SALESMAN','$','MANAGER','$','MANAGER','$'】,


'd':【7902,7698,7698,7839,7698,7839,7839】,


'e':【'1980/12/17','1981/2/20','1981/2/22','1981/4/2','1981/9/28','1981/5/1','1981/6/9'】,


'f':【800,1600,1250,2975,1230,2859,2450】,


'g':【np.nan,300.0,500.0,np.nan,1400.0,np.nan,np.nan】,


'h':【20,30,30,20,30,30,10】})


#替换全部或者某行某列


#全部替换,这二者效果一样


df.replace(20,30)


df.replace(to_replace=20,value=30)


#某一列或者某几列


df【'h'】.replace(20,30)


df【【'b','c'】】.replace('$','rmb')


#某一行或者几行


df.iloc【1】.replace(1600,1700)


df.iloc【1:3】.replace(30,40)


#inplace=True


df.replace(20,30,inplace=True)


df.iloc【1:3】.replace(30,40,inplace=True)


#用list或者dict进行单值或者多值填充,


#单值


#注意,list是前者替换后者,dict字典里的建作为原值,字典里的值作为替换的新值


df.replace(【20,30】)


df.replace({20:30})


#多值,list是list逗号后的值替换list的值,dict字典里的建作为原值,字典里的值作为替换的新值


df.replace(【20,1600】,【40,1700】) #20被40替换,1600被1700替换


df.replace(【20,30】,'b') #20,30都被b替换


df.replace({20:30,1600:1700})


df.replace({20,30},{'a','b'}) #这个和list多值用法//代码效果参考:http://hnjlyzjd.com/hw/wz_24733.html

一样

#,method


#其实只需要传入被替换的值,


df.replace(【'a',30】,method='pad')


df.replace(【'a',30】,method='ffill')


df.replace(【'a',30】,method='bfill')


#可以直接这样表达


df.replace(30,method='bfill') #用30下面的最靠近非30的值填充


df.replace(30,method='ffill') #用30上面最靠近非30的值填充


df.replace(30,method='pad') #用30上面最靠近非30的值填充


#一般用于空值填充


df.replace(np.nan,method='bfill')


#limit


df.replace(30,method='bfill',limit=1) #现在填充的间隔数


#正则替换


#转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\表示的字符就是\


#如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义


df.replace(r'\?|.|\$',np.nan) //代码效果参考:http://hnjlyzjd.com/hw/wz_24731.html

#和原来没有变化

df.replace(r'\?|.|\$',np.nan,regex=True)#用np.nan替换?或.或$原字符


df.replace(【r'\?',r'\$'】,np.nan,regex=True)#用np.nan替换?和$


df.replace(【r'\?',r'\$'】,【np.nan,'NA'】,regex=True)#用np.nan替换?用NA替换$符号


df.replace(regex={r'\?':None})


#当然,如果不想使用inplace=True,也可以这样子表达


df=df.replace(20,30)


df.replace(20,30,inplace=True)

相关文章
|
存储 安全 算法
Linux 中的密码生成器:如何在命令行中生成随机密码
Linux 中的密码生成器:如何在命令行中生成随机密码
557 2
Linux 中的密码生成器:如何在命令行中生成随机密码
|
设计模式 算法 Java
各种奇葩变量名合集
一个好的变量名能让读代码的人(包括写的人),身心舒畅,但一个“奇葩”的变量名可能会逼疯一个程序员。今天是各种各样的奇葩变量名大赏!!!!!!在编程过程中,好的变量命名是非常重要的。一个好的变量名能够清晰地表达变量的含义和作用,从而提高代码的可读性和可维护性。然而,有些时候,由于种种原因,开发者会使用一些非常奇特或者奇葩的变量名。本文将总结一些常见的奇葩变量名,并分析其原因和可能的改进方法。
275 1
|
存储 Go 开发者
深入理解Go语言中的`src`目录结构
【8月更文挑战第31天】
368 0
|
程序员 Python
Python中的异常处理:try-except语句的深入理解
【2月更文挑战第20天】在Python编程中,错误和异常处理是至关重要的部分。通过理解和掌握异常处理机制,我们能够更好地控制程序流程,处理运行时的错误,从而提高程序的稳定性和健壮性。本文将深入探讨Python中的异常处理机制,重点解析try-except语句的使用和原理。
745 1
|
虚拟化 网络虚拟化 网络架构
虚拟机 VMware Workstation 16 PRO 的网络配置
虚拟机 VMware Workstation 16 PRO 的网络配置
466 2
|
Kubernetes 安全 数据安全/隐私保护
在k8S中,如何保证集群的安全性?
在k8S中,如何保证集群的安全性?
|
存储 数据挖掘 数据处理
【破晓数据湖新时代!】巴别时代揭秘:Apache Paimon 打造 Streaming Lakehouse 的神奇之旅!
【8月更文挑战第9天】随着数据湖技术的发展,企业积极探索优化数据处理的新途径。Apache Paimon 作为一款高性能数据湖框架,支持流式与批处理,适用于实时数据分析。本文分享巴别时代使用 Paimon 构建 Streaming Lakehouse 的实践经验。Paimon 统一了数据存储与查询方式,对构建实时数据管道极具价值。
518 3
|
JSON 数据处理 API
盘点Python中4种读取JSON文件和提取JSON文件内容的方法
盘点Python中4种读取JSON文件和提取JSON文件内容的方法
2669 0
|
存储 运维 资源调度
分布式交换机其实可以这么玩!
分布式交换机其实可以这么玩!
|
算法 计算机视觉 Python
【完美解决方案】module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘
【完美解决方案】module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘
1742 0