技术笔记: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)

相关文章
|
12月前
|
Ubuntu 机器人 Linux
端口排查步骤-7680端口分析-Dosvc服务
对通过服务启动的进程查找主进程
7013 0
Python之pandas:数据类型变换之object、category、bool、int32、int64、float64以及数据类型标准化之详细攻略
Python之pandas:数据类型变换之object、category、bool、int32、int64、float64以及数据类型标准化之详细攻略
Python之pandas:数据类型变换之object、category、bool、int32、int64、float64以及数据类型标准化之详细攻略
|
12月前
|
人工智能 自然语言处理 前端开发
💻2024 年值得一试的 8 个开发者工具💡
在本文中,我们精选了8款开发人员必备的高效工具,包括Webcrumbs、Pieces.app、Warp、Raycast等。这些工具涵盖了从前端插件生成、代码片段管理到多语言界面构建等多种功能,帮助开发人员简化工作流程、提高生产力。无论您是经验丰富的开发者,还是刚入行的新手,这些工具都将为您的开发过程带来效率提升和便利。探索这些工具,让您的开发工作更加轻松高效!
983 66
|
机器学习/深度学习 自然语言处理 数据可视化
学习Anaconda一定要了解这几件事
学习Anaconda一定要了解这几件事
470 3
|
数据挖掘 索引 Python
Pandas中的排序技巧:让你的数据井然有序
Pandas中的排序技巧:让你的数据井然有序
684 1
|
数据采集 数据可视化 数据挖掘
数据清洗(Data Cleaning)
数据清洗(Data Cleaning)
714 1
|
调度 数据库 Python
python中APScheduler的使用详解(python3经典编程案例)
文章详细讲解了在Python中使用APScheduler来安排和执行定时任务的方法,包括不同调度器的配置与使用场景。
565 0
|
数据可视化 数据处理 Python
python处理NetCDF格式文件
python处理NetCDF格式文件
470 0
python处理NetCDF格式文件
|
弹性计算 Serverless 持续交付
聊聊如何把项目从Gitee部署到阿里云上
【7月更文挑战第11天】聊聊如何把项目从Gitee部署到阿里云上
578 1