Pandas Series.str.replace()函数
Series.str.replace() 是 Pandas 中用于替换字符串中指定内容的函数。
在数据处理过程中,我们经常需要对文本进行替换操作,比如修正错误文本、标准化数据格式、删除不需要的字符等。replace() 函数可以灵活地替换字符串中的指定内容,支持正则表达式匹配。
单词释义:replace 是"替换"的意思,表示用新的内容替换旧的内容。
基本语法与参数
str.replace() 是 Series 的字符串访问器方法,因此你需要先有一个包含字符串的 Series,然后通过 .str 访问器来调用它。
语法格式
Series.str.replace(pat, repl, regex=False)
参数说明
| 参数 | 类型 | 是否必填 | 说明 | 默认值 |
|---|---|---|---|---|
| pat | str 或 regex | 必填 | 要替换的模式,可以是普通字符串或正则表达式(当 regex=True 时)。 | - |
| repl | str 或 callable | 必填 | 替换后的内容,可以是字符串或可调用函数(用于高级替换)。 | - |
| regex | bool | 可选 | 是否将 pat 参数作为正则表达式处理。默认为 False。 | False |
函数说明
- 返回值:返回一个替换后的新 Series。
- 效果:将 Series 中每个字符串元素中匹配的内容替换为新的内容。
- 注意:默认情况下使用普通字符串匹配,如果需要正则表达式匹配,需要设置
regex=True。
实例
让我们通过一系列从简单到复杂的例子,彻底掌握 str.replace() 的用法。
示例 1:基础用法 - 简单字符串替换
实例
import pandas as pd
# 创建一个包含文本的 Series
s = pd.Series(['apple', 'banana', 'apricot', 'pineapple'])
# 将 'ap' 替换为 'XX'
result = s.str.replace('ap', 'XX')
print("原始 Series:")
print(s)
print("n替换后的结果:")
print(result)
# 创建一个包含文本的 Series
s = pd.Series(['apple', 'banana', 'apricot', 'pineapple'])
# 将 'ap' 替换为 'XX'
result = s.str.replace('ap', 'XX')
print("原始 Series:")
print(s)
print("n替换后的结果:")
print(result)
输出结果:
原始 Series: 0 apple 1 banana 2 apricot 3 pineapple dtype: object 替换后的结果: 0 XXle 1 banana 2 XXricot 3 XXneXXple
代码解析:
s.str.replace('ap', 'XX')将所有出现的 'ap' 替换为 'XX'。- 默认情况下,只替换第一个匹配项(如果字符串中出现多次,只有第一个被替换)。
- 可以通过添加正则表达式标志来替换所有匹配项。
示例 2:使用正则表达式替换所有匹配项
当需要替换所有匹配项时,可以使用正则表达式。
实例
import pandas as pd
# 创建一个包含文本的 Series
s = pd.Series(['apple', 'banana', 'apricot', 'pineapple'])
# 使用正则表达式替换所有 'ap' 为 'XX'
result = s.str.replace('ap', 'XX', regex=True)
print("原始 Series:")
print(s)
print("n替换所有 'ap' 后的结果:")
print(result)
# 创建一个包含文本的 Series
s = pd.Series(['apple', 'banana', 'apricot', 'pineapple'])
# 使用正则表达式替换所有 'ap' 为 'XX'
result = s.str.replace('ap', 'XX', regex=True)
print("原始 Series:")
print(s)
print("n替换所有 'ap' 后的结果:")
print(result)
输出结果:
原始 Series: 0 apple 1 banana 2 apricot 3 pineapple dtype: object 替换所有 'ap' 后的结果: 0 XXle 1 banana 2 XXricot 3 XXneXXple
代码解析:
- 设置
regex=True后,使用正则表达式进行匹配。 - 在正则表达式中,
'ap'匹配字符串中所有出现的 'ap'。 - 'pineapple' 中有两个 'ap',两个都被替换为 'XX'。
示例 3:替换数字和符号
replace() 可以用于清理数据,比如移除数字或特殊符号。
实例
import pandas as pd
# 创建包含混合内容的 Series
s = pd.Series(['phone: 123-456-7890', 'price: $99.99', 'date: 2024-01-01'])
# 移除所有数字
result_digits = s.str.replace(r'd', '', regex=True)
# 移除所有非字母数字字符(保留空格)
result_special = s.str.replace(r'[^a-zA-Z0-9s]', '', regex=True)
print("原始 Series:")
print(s)
print("n移除所有数字后:")
print(result_digits)
print("n移除所有特殊字符后:")
print(result_special)
# 创建包含混合内容的 Series
s = pd.Series(['phone: 123-456-7890', 'price: $99.99', 'date: 2024-01-01'])
# 移除所有数字
result_digits = s.str.replace(r'd', '', regex=True)
# 移除所有非字母数字字符(保留空格)
result_special = s.str.replace(r'[^a-zA-Z0-9s]', '', regex=True)
print("原始 Series:")
print(s)
print("n移除所有数字后:")
print(result_digits)
print("n移除所有特殊字符后:")
print(result_special)
输出结果:
原始 Series: 0 phone: 123-456-7890 1 price: $99.99 2 date: 2024-01-01 dtype: object 移除所有数字后: phone: --- price: $.$ date: ------ 移除所有特殊字符后: phone 1234567890 price 9999 date 20240101
代码解析:
r'd'是正则表达式,匹配任意数字。r'[^a-zA-Z0-9s]'匹配所有非字母数字且非空格的字符。- 这是数据清洗中非常常见的操作。
示例 4:使用回调函数进行替换
repl 参数可以是一个函数,用于更复杂的替换逻辑。
实例
import pandas as pd
# 创建一个包含文本的 Series
s = pd.Series(['hello', 'world', 'runoob', 'python'])
# 使用回调函数将匹配到的字符串转为大写
result = s.str.replace(r'[aeiou]', lambda m: m.group(0).upper(), regex=True)
print("原始 Series:")
print(s)
print("n将元音字母转为大写后:")
print(result)
# 创建一个包含文本的 Series
s = pd.Series(['hello', 'world', 'runoob', 'python'])
# 使用回调函数将匹配到的字符串转为大写
result = s.str.replace(r'[aeiou]', lambda m: m.group(0).upper(), regex=True)
print("原始 Series:")
print(s)
print("n将元音字母转为大写后:")
print(result)
输出结果:
原始 Series: 0 hello 1 world 2 runoob 3 python dtype: object 将元音字母转为大写后: 0 hEllo 1 wOrld 2 rUnOOb 3 pythOn
代码解析:
- 回调函数接收一个匹配对象,可以使用
m.group(0)获取匹配的内容。 - 将元音字母(a, e, i, o, u)转换为大写。
- 这是实现更复杂替换逻辑的好方法。
示例 5:标准化数据格式
在实际项目中,replace() 经常用于标准化数据格式。
实例
import pandas as pd
# 模拟用户输入的国家名称(格式不统一)
countries = pd.Series(['USA', 'U.S.A.', 'U.S.A', 'usa', 'us', 'United States'])
# 统一替换为标准名称
result = countries.replace({
'USA': 'US',
'U.S.A.': 'US',
'U.S.A': 'US',
'usa': 'US',
'us': 'US',
'United States': 'US'
})
print("原始国家名称:")
print(countries)
print("n统一后的结果:")
print(result)
# 模拟用户输入的国家名称(格式不统一)
countries = pd.Series(['USA', 'U.S.A.', 'U.S.A', 'usa', 'us', 'United States'])
# 统一替换为标准名称
result = countries.replace({
'USA': 'US',
'U.S.A.': 'US',
'U.S.A': 'US',
'usa': 'US',
'us': 'US',
'United States': 'US'
})
print("原始国家名称:")
print(countries)
print("n统一后的结果:")
print(result)
输出结果:
原始国家名称: 0 USA 1 U.S.A. 2 U.S.A 3 usa 4 us 5 United States dtype: object 统一后的结果: 0 US 1 US 2 US 3 US 4 0 US dtype: object
代码解析:
- 这个例子使用了 Series 的
replace()方法(不是 str.replace)。 - 可以传入一个字典来批量替换多个值。
- 将各种不同的表示方式统一为标准格式。
注意事项
- 默认情况下(
regex=False),pat参数被当作普通字符串,只替换第一个匹配项。 - 设置
regex=True后,使用正则表达式进行匹配,可以替换所有匹配项。 - 正则表达式中一些特殊字符(如
.、*等)需要转义。 - 如果 Series 中包含 NaN 值,
replace()会返回 NaN。 - 该函数返回一个新的 Series,不会修改原始数据。

Pandas 常用函数