>>> s = pd.Series([1, 2, 3, 4, 5])
>>> s.replace(1, 5)
0 5
1 2
2 3
3 4
4 5
dtype: int64
>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
... 'B': [5, 6, 7, 8, 9],
... 'C': ['a', 'b', 'c', 'd', 'e']})
>>> df.replace(0, 5)
A B C
0 5 5 a
1 1 6 b
2 2 7 c
3 3 8 d
4 4 9 e
类似列表的 `to_replace`
>>> df.replace([0, 1, 2, 3], 4)
A B C
0 4 5 a
1 4 6 b
2 4 7 c
3 4 8 d
4 4 9 e
>>> df.replace([0, 1, 2, 3], [4, 3, 2, 1])
A B C
0 4 5 a
1 3 6 b
2 2 7 c
3 1 8 d
4 4 9 e
类似字典的 `to_replace`
>>> df.replace({0: 10, 1: 100})
A B C
0 10 5 a
1 100 6 b
2 2 7 c
3 3 8 d
4 4 9 e
>>> df.replace({'A': 0, 'B': 5}, 100)
A B C
0 100 100 a
1 1 6 b
2 2 7 c
3 3 8 d
4 4 9 e
>>> df.replace({'A': {0: 100, 4: 400}})
A B C
0 100 5 a
1 1 6 b
2 2 7 c
3 3 8 d
4 400 9 e
正则表达式 `to_replace`
>>> df = pd.DataFrame({'A': ['bat', 'foo', 'bait'],
... 'B': ['abc', 'bar', 'xyz']})
>>> df.replace(to_replace=r'^ba.$', value='new', regex=True)
A B
0 new abc
1 foo new
2 bait xyz
>>> df.replace({'A': r'^ba.$'}, {'A': 'new'}, regex=True)
A B
0 new abc
1 foo bar
2 bait xyz
>>> df.replace(regex=r'^ba.$', value='new')
A B
0 new abc
1 foo new
2 bait xyz
>>> df.replace(regex={r'^ba.$': 'new', 'foo': 'xyz'})
A B
0 new abc
1 xyz new
2 bait xyz
>>> df.replace(regex=[r'^ba.$', 'foo'], value='new')
A B
0 new abc
1 new new
2 bait xyz
比较 s.replace({'a': None})
和 s.replace('a', None)
的行为以理解 to_replace 参数的特殊之处:
>>> s = pd.Series([10, 'a', 'a', 'b', 'a'])
当使用一个字典作为 to_replace 值时,字典中的值等于 value 参数。s.replace({'a': None})
等同于 s.replace(to_replace={'a': None}, value=None)
:
>>> s.replace({'a': None})
0 10
1 None
2 None
3 b
4 None
dtype: object
如果 None
被显式地传递给 value
,它将被尊重:
>>> s.replace('a', None)
0 10
1 None
2 None
3 b
4 None
dtype: object
当 regex=True
时,value
不是 None
并且 to_replace 是一个字符串,替换将在 DataFrame 的所有列中应用。
>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
... 'B': ['a', 'b', 'c', 'd', 'e'],
... 'C': ['f', 'g', 'h', 'i', 'j']})
>>> df.replace(to_replace='^[a-g]', value='e', regex=True)
A B C
0 0 e e
1 1 e e
2 2 e h
3 3 e i
4 4 e j
如果 value
不是 None
并且 to_replace 是一个字典,字典的键将是替换将应用的 DataFrame 列。
>>> df.replace(to_replace={'B': '^[a-c]', 'C': '^[h-j]'}, value='e', regex=True)
A B C
0 0 e f
1 1 e g
2 2 e e
3 3 d e
4 4 e e