pandas数据操作(四)

数据替换

replace替换

  • replace函数
df.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad',)
  • 参数说明:
  1. to_replace:被替换的值 value:替换后的值
  2. inplace:是否要改变原数据,False是不改变,True是改变,默认是False limit:控制填充次数
  3. inplace:是否要改变原数据,False是不改变,True是改变,默认是False
  4. limit:控制填充次数
  5. regex:是否使用正则,False是不使用,True是使用,默认是False
  6. method:填充方式,pad,ffill,bfill分别是向前、向前、向后填充
  • e.g.
#替换全部或者某行某列
#全部替换,这二者效果一样
df.replace(20,30)
df.replace(to_replace=20,value=30)

#替换h列中的20为30
df['h'].replace(20,30)
替换'b','c'列中的'$'为'rmb'
df[['b','c']].replace('$','rmb')

#某一行或者几行
df.iloc[1].replace(1600,1700)
df.iloc[1:3].replace(30,40)


#用list或者dict进行单值或者多值填充,
#单值
#注意,list是前者替换后者,dict字典里的建作为原值,字典里的值作为替换的新值
df.replace([20,30])
df.replace({20:30})


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

#20被40替换,1600被1700替换
df.replace([20,1600],[40,1700])  

#20,30都被b替换
df.replace([20,30],'b')  
df.replace({20:30,1600:1700})

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

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

#替换'索引'列的0为1
df.replace({'索引': {0: -1}})

正则替换

#转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\
#如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义
 #和原来没有变化
df.replace(r'\?|\.|\$',np.nan) 

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

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

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

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

#当然,如果不想使用inplace=True,也可以这样子表达
df=df.replace(20,30)
df.replace(20,30,inplace=True)

TAG:none

发表新评论