Pandas文档中的replace
没有任何示例,因此我将在此提供一些示例。对于那些像我一样从R角度来看待这个问题的人来说,replace
基本上是一个多功能替换函数,它结合了R函数plyr::mapvalues
、plyr::revalue
和stringr::str_replace_all
的功能。由于DSM已经涵盖了单值情况,我将涵盖多值情况。
示例系列
In [10]: x = pd.Series([1, 2, 3, 4])
In [11]: x
Out[11]:
0 1
1 2
2 3
3 4
dtype: int64
我们希望用负整数替换正整数(而不是乘以-1)。
两个值列表
一种方法是使用一个列表(或pandas系列)来存储我们想要替换的值,第二个列表则存储我们想要替换它们的值。
In [14]: x.replace([1, 2, 3, 4], [-1, -2, -3, -4])
Out[14]:
0 -1
1 -2
2 -3
3 -4
dtype: int64
这对应于
plyr::mapvalues
。
值对字典
有时候拥有一个值对字典更加方便。索引是我们要替换的内容,而值则是我们要替换成的内容。
In [15]: x.replace({1: -1, 2: -2, 3: -3, 4: -4})
Out[15]:
0 -1
1 -2
2 -3
3 -4
dtype: int64
这对应于plyr::revalue
。
字符串
对于字符串,它的工作方式类似,但我们还可以选择使用正则表达式模式。
如果我们只想用其他字符串替换字符串,它的工作方式与以前完全相同:
In [18]: s = pd.Series(["ape", "monkey", "seagull"])
In [22]: s
Out[22]:
0 ape
1 monkey
2 seagull
dtype: object
两个列表
In [25]: s.replace(["ape", "monkey"], ["lion", "panda"])
Out[25]:
0 lion
1 panda
2 seagull
dtype: object
字典
In [26]: s.replace({"ape": "lion", "monkey": "panda"})
Out[26]:
0 lion
1 panda
2 seagull
dtype: object
正则表达式
用 x
替换所有的 a
。
In [27]: s.replace("a", "x", regex=True)
Out[27]:
0 xpe
1 monkey
2 sexgull
dtype: object
将所有的 l
替换为 x
。
In [28]: s.replace("l", "x", regex=True)
Out[28]:
0 ape
1 monkey
2 seaguxx
dtype: object
请注意,
seagull
中的两个
l
都被替换了。
将
a
替换为
x
,将
l
替换为
p
。
In [29]: s.replace(["a", "l"], ["x", "p"], regex=True)
Out[29]:
0 xpe
1 monkey
2 sexgupp
dtype: object
在一种特殊情况下,如果想要用相同的值替换多个不同的值,可以只使用一个字符串作为替换值。它不能在列表中。将
a
和
l
替换为
p
。
In [29]: s.replace(["a", "l"], "p", regex=True)
Out[29]:
0 ppe
1 monkey
2 sepgupp
dtype: object
(感谢评论区的DaveL17)