pandas.Series.replace
参数信息
参数列表:
-
to_replace: str, regex, list, dict, Series, int, float, 或 None
- 需要被替换的值。
- 数值、字符串或正则表达式:数值将替换等于to_replace的值,字符串将替换完全匹配to_replace的值,正则表达式将替换匹配to_replace的值。
- 列表:如果to_replace和value都是列表,它们必须长度相同。如果regex=True,则两个列表中的字符串都将被解释为正则表达式。
- 字典:可以指定不同的替换值对应不同的现有值。例如,{‘a’: ‘b’, ‘y’: ‘z’}将值‘a’替换为‘b’,将‘y’替换为‘z’。
- None:如果regex是一个字符串、编译的正则表达式或这样的元素的列表、字典、ndarray或Series,to_replace必须是None。
-
value: scalar, dict, list, str, regex,默认为None
- 用于替换匹配to_replace的值。
- 对于DataFrame,可以使用字典值指定每列的替换值。
-
inplace: bool,默认为False
- 如果为True,则在原地进行操作并不返回任何内容。
-
limit: int,默认为None
- 向前或向后填充的最大大小差距。(已在2.1.0版本中弃用)
-
regex: bool或与to_replace相同类型的值,默认为False
- 是否将to_replace和/或value解释为正则表达式。或者,这可以是一个正则表达式或列表、字典或数组中的正则表达式,在这种情况下to_replace必须是None。
-
method: ‘pad’, ‘ffill’, ‘bfill’
- 当to_replace是标量、列表或元组且value是None时,用于替换的方法。(已在2.1.0版本中弃用)
返回值:
- Series/DataFrame:替换后的Series或DataFrame对象。
使用方法
Series.replace
方法用于动态替换Series或DataFrame中的值。这与使用.loc
或.iloc
更新不同,后者需要你指定要更新的位置和值。
具体示例
示例1:标量to_replace和value
import pandas as pd
s = pd.Series([1, 2, 3, 4, 5])
result = s.replace(1, 5)
print(result)
输出:
0 5
1 2
2 3
3 4
4 5
dtype: int64
示例2:列表like to_replace
df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
'B': [5, 6, 7, 8, 9],
'C': ['a', 'b', 'c', 'd', 'e']})
result = df.replace([0, 1, 2, 3], 4)
print(result)
输出:
A B C
0 4 5 a
1 4 6 b
2 4 7 c
3 4 8 d
4 4 9 e
示例3:dict-like to_replace
result = df.replace({0: 10, 1: 100})
print(result)
输出:
A B C
0 10 5 a
1 100 6 b
2 2 7 c
3 3 8 d
4 4 9 e
示例4:正则表达式to_replace
df = pd.DataFrame({'A': ['bat', 'foo', 'bait'],
'B': ['abc', 'bar', 'xyz']})
result = df.replace(to_replace=r'^ba.$', value='new', regex=True)
print(result)
输出:
A B
0 new abc
1 foo new
2 bait xyz
示例5:使用正则表达式替换多个值
result = df.replace(regex=[r'^ba.$', 'foo'], value='new')
print(result)
输出:
A B
0 new abc
1 new new
2 bait xyz
示例6:使用字典进行正则表达式替换
result = df.replace(regex={r'^ba.$': 'new', 'foo': 'xyz'})
print(result)
输出:
A B
0 new abc
1 xyz new
2 bait xyz
示例7:理解s.replace({'a': None})
和s.replace('a', None)
的区别
s = pd.Series([10, 'a', 'a', 'b', 'a'])
result1 = s.replace({'a': None})
print(result1)
输出:
0 10
1 None
2 None
3 b
4 None
dtype: object
result2 = s.replace('a', None)
print(result2)
输出:
0 10
1 None
2 None
3 b
4 None
dtype: object
示例8:当regex=True
且value
不是None
时,替换将应用于所有列
df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
'B': ['a', 'b', 'c', 'd', 'e'],
'C': ['f', 'g', 'h', 'i', 'j']})
result = df.replace(to_replace='^[a-g]', value='e', regex=True)
print(result)
输出:
A B C
0 0 e e
1 1 e e
2 2 e h
3 3 e i
4 4 e j
示例9:如果value
不是None
且to_replace
是一个字典,字典的键将是DataFrame中需要替换的列
result = df.replace(to_replace={'B': '^[a-c]', 'C': '^[h-j]'}, value='e', regex=True)
print(result)
输出:
A B C
0 0 e f
1 1 e g
2 2 e e
3 3 d e
4 4 e e
replace
方法非常灵活,可以根据需要进行各种复杂的替换操作。
以下是一些常用的正则表达式及其说明,适用于字符串匹配和搜索:
常用正则表达式
-
匹配任意字符
.
:匹配除换行符以外的任何单个字符。
-
匹配数字
\d
:匹配任何数字,等价于[0-9]
。\D
:匹配任何非数字字符。
-
匹配字母
\w
:匹配任何字母数字字符(字母、数字和下划线),等价于[a-zA-Z0-9_]
。\W
:匹配任何非字母数字字符。
-
匹配空白字符
\s
:匹配任何空白字符(空格、制表符、换行符等)。\S
:匹配任何非空白字符。
-
匹配开头和结尾
^
:匹配字符串的开头。$
:匹配字符串的结尾。
-
匹配特定字符
[abc]
:匹配字符 a、b 或 c 中的任意一个。[^abc]
:匹配除 a、b、c 之外的任何字符。[a-z]
:匹配小写字母 a 到 z。[A-Z]
:匹配大写字母 A 到 Z。[0-9]
:匹配数字 0 到 9。
-
数量修饰符
*
:匹配前面的表达式零次或多次。+
:匹配前面的表达式一次或多次。?
:匹配前面的表达式零次或一次。{n}
:匹配前面的表达式恰好 n 次。{n,}
:匹配前面的表达式至少 n 次。{n,m}
:匹配前面的表达式至少 n 次,但不超过 m 次。
-
分组和选择
(abc)
:匹配字符串 “abc”。a|b
:匹配字符 a 或 b。
-
转义字符
\
:用于转义特殊字符,例如\.
匹配字面上的点字符。
-
其他常用模式
\b
:匹配单词边界。\B
:匹配非单词边界。(?i)
:使后面的匹配不区分大小写。
示例
-
匹配邮箱地址:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
-
匹配 URL:
https?://[^\s/$.?#].[^\s]*
-
匹配日期(YYYY-MM-DD):
\d{4}-\d{2}-\d{2}
-
匹配电话号码:
\d{3}-\d{3}-\d{4} # 格式: 123-456-7890
下面是一些常用的正则表达式。
常用的正则表达式