pandas的替换函数:在replace()函数

2023年2月16日13:42:41pandas的替换函数:在replace()函数已关闭评论

在replace()中,可以通过字典构造或者传入两个列表(分别表示需要替换的值和替换后的值)来进行替换:

In [60]:   df['Gender'].replace({'Female':0, 'Male':1}).head()
Out[60]:   0    0
           1    1
           2    1
           3    0
           4    1
           Name: Gender, dtype: int64
In [61]:   df['Gender'].replace(['Female', 'Male'], [0, 1]).head()
Out[61]:   0    0
           1    1
           2    1
           3    0
           4    1
           Name: Gender, dtype: int64

另外,replace()还可以进行一种特殊的方向替换,指定参数method为ffill时,用前面一个最近的未被替换的值进行替换,参数method为bfill时,则用后面最近的未被替换的值进行替换。从下面的例子可以看到,它们的结果是不同的:

In [62]:   s = pd.Series(['a', 1, 'b', 2, 1, 1, 'a'])
           s.replace([1, 2], method='ffill')
Out[62]:   0    a
           1    a
           2    b
           3    b
           4    b
           5    b
           6    a
           dtype: object
In [63]:   s.replace([1, 2], method='bfill')
Out[63]:   0    a
           1    b
           2    b
           3    a
           4    a
           5    a
           6    a
           dtype: object

逻辑替换包括where()和mask(),这两个函数是相对应的:where()在传入条件为False的对应行进行替换,而mask()在传入条件为True的对应行进行替换,当未对二者指定替换值时,将对应行替换为缺失值。

In [64]:   s = pd.Series([-1, 1.2345, 100, -50])
           s.where(s<0)
Out[64]:   0     -1.0
           1      NaN
           2      NaN
           3    -50.0
           dtype: float64
In [65]:   s.where(s<0, 100)
Out[65]:   0     -1.0
           1    100.0
           2    100.0
           3    -50.0
           dtype: float64
In [66]:   s.mask(s<0)
Out[66]:   0         NaN
           1      1.2345
           2    100.0000
           3         NaN
           dtype: float64
In [67]:   s.mask(s<0, -50)
Out[67]:   0    -50.0000
           1      1.2345
           2    100.0000
           3    -50.0000
           dtype: float64

需要注意的是,传入的条件只需要是布尔序列即可,但其索引应当与被调用的Series索引一致:

In [68]:   s_condition= pd.Series([True,False,False,True],index=s.index)
           s.mask(s_condition, -50)
Out[68]:   0    -50.0000
           1      1.2345
           2    100.0000
           3    -50.0000
           dtype: float64

数值替换包含round()、abs()和clip(),它们分别表示按照给定精度四舍五入、取绝对值和截断:

In [69]:   s = pd.Series([-1, 1.2345, 100, -50])
           s.round(2)
Out[69]:   0     -1.00
           1      1.23
           2    100.00
           3    -50.00
           dtype: float64
In [70]:   s.abs()
Out[70]:   0    1.0000
           1    1.2345
           2  100.0000
           3   50.0000
           dtype: float64
In [71]:   s.clip(0, 2) # 前两个数分别表示上下截断边界
Out[71]:   0    0.0000
           1    1.2345
           2    2.0000
           3    0.0000
           dtype: float64
  • A+
所属分类:R
  • 版权声明:本篇文章(包括图片)来自网络,由程序自动采集,著作权(版权)归原作者所有,如有侵权联系我们删除,联系方式(QQ:452038415)。