数据清洗之值的替换(replace)

很多情况下,我们想把一些值替换成其他值,这里可以用pandas中replace()实现.

In [102]: ser = pd.Series([0., 1., 2., 3., 4.])

#单个值的替换
In [103]: ser.replace(0, 5)  # 把0替换成5
Out[103]: 
0    5.0
1    1.0
2    2.0
3    3.0
4    4.0
dtype: float64

#一组值(list)的替换
In [104]: ser.replace([0, 1, 2, 3, 4], [4, 3, 2, 1, 0]) # 把0,1,2,3,4依次替换成4,3,2,1,0
Out[104]: 
0    4.0
1    3.0
2    2.0
3    1.0
4    0.0
dtype: float64 

#字典(dict)的替换
In [105]: ser.replace({0: 10, 1: 100}) # 索引0对应的值替换为10,索引1对应的值替换为100
Out[105]: 
0     10.0
1    100.0
2      2.0
3      3.0
4      4.0
dtype: float64 

#把指定值当成缺失值,再进行填充
In [108]: ser.replace([1, 2, 3], method='pad') # 把1,2,3当成缺失值,再用上一个非空值进行填充.
Out[108]: 
0    0.0
1    0.0
2    0.0
3    0.0
4    4.0
dtype: float64


In [106]: df = pd.DataFrame({'a': [0, 1, 2, 3, 4], 'b': [5, 6, 7, 8, 9]})
In [107]: df.replace({'a': 0, 'b': 5}, 100)  # a列值为0的替换成100,b列值为5的替换成100.
#df.replace(0,100)
#df.replace(5,100)
Out[107]: 
     a    b
0  100  100
1    1    6
2    2    7
3    3    8
4    4    9

#运用正则表达式进行替换
In [109]: d = {'a': list(range(4)), 'b': list('ab..'), 'c': ['a', 'b', np.nan, 'd']}
In [110]: df = pd.DataFrame(d)
In [112]: df.replace(r'\s*\.\s*', np.nan, regex=True)
Out[112]: 
   a    b    c
0  0    a    a
1  1    b    b
2  2  NaN  NaN
3  3  NaN    d

#运用list进行替换
In [113]: df.replace(['a', '.'], ['b', np.nan])  # a替换为b,.替换为NaN
Out[113]: 
   a    b    c
0  0    b    b
1  1    b    b
2  2  NaN  NaN
3  3  NaN    d

#正则list形式的替换
In [114]: df.replace([r'\.', r'(a)'], ['dot', r'\1stuff'], regex=True)  # .替换成dot,a替换成astuff
Out[114]: 
   a       b       c
0  0  astuff  astuff
1  1       b       b
2  2     dot     NaN
3  3     dot       d

#dict形式的替换
In [115]: df.replace({'b': '.'}, {'b': np.nan})  # 指定b列中的.替换成NaN
#df.replace({'b': r'\s*\.\s*'}, {'b': np.nan}, regex=True)与前者等同
Out[115]: 
   a    b    c
0  0    a    a
1  1    b    b
2  2  NaN  NaN
3  3  NaN    d

#嵌套dict
In [117]: df.replace({'b': {'b': r''}}, regex=True)  # b列中的b替换成''
#  df.replace(regex={'b': {r'\s*\.\s*': np.nan}}) b列中.替换成NaN
Out[117]: 
   a  b    c
0  0  a    a
1  1       b
2  2  .  NaN
3  3  .    d
In [119]: df.replace({'b': r'\s*(\.)\s*'}, {'b': r'\1ty'}, regex=True)   # b列中.替换成.ty
Out[119]: 
   a    b    c
0  0    a    a
1  1    b    b
2  2  .ty  NaN
3  3  .ty    d
In [120]: df.replace([r'\s*\.\s*', r'a|b'], np.nan, regex=True)   # .,a,b替换成NaN
#  df.replace(regex=[r'\s*\.\s*', r'a|b'], value=np.nan)与前者等同
Out[120]: 
   a   b    c
0  0 NaN  NaN
1  1 NaN  NaN
2  2 NaN  NaN
3  3 NaN    d
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值