zoukankan      html  css  js  c++  java
  • pandas replace() 替换用法

     

    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)  #现在填充的间隔数
    

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

    #正则替换
    #转义字符可以转义很多字符,比如
    表示换行,	表示制表符,字符本身也要转义,所以\表示的字符就是
    #如果字符串里面有很多字符都需要转义,就需要加很多,为了简化,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多值用法一样
    
    #,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)  #现在填充的间隔数
    
    
    
    #正则替换
    #转义字符可以转义很多字符,比如
    表示换行,	表示制表符,字符本身也要转义,所以\表示的字符就是
    #如果字符串里面有很多字符都需要转义,就需要加很多,为了简化,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)
  • 相关阅读:
    ant design vue模态框中下拉滚动样式分离解决方法
    vue+element处理前端分页
    vue中引入图片报Error: Can't resolve '../../assets/xx.png' in 'xxxx' 无法解析错误记录
    同页面多个echarts饼图组件封装
    后台报错"Optional int parameter 'page' is present but cannot be translated into a null value due to being declared as a primitive type"
    ant design vue中table动态合并列
    vuex数据持久化
    ant design vue中使用TreeSelect懒加载
    vue报错You are using the runtime-only build of Vue where the template compiler
    ant design vue中表格自带分页
  • 原文地址:https://www.cnblogs.com/cgmcoding/p/13362539.html
Copyright © 2011-2022 走看看