现在位置: 首页 > Pandas 教程 > 正文

Pandas Series.str.replace()函数

Pandas 常用函数 Pandas 常用函数


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:
0        apple
1       banana
2       apricot
3    pineapple
dtype: object

替换后的结果:
0       XXle
1       banana
2       XXricot
3    XXneXXple

代码解析:

  1. s.str.replace('ap', 'XX') 将所有出现的 'ap' 替换为 'XX'。
  2. 默认情况下,只替换第一个匹配项(如果字符串中出现多次,只有第一个被替换)。
  3. 可以通过添加正则表达式标志来替换所有匹配项。

示例 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:
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:
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:
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)

输出结果:

原始国家名称:
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 常用函数 Pandas 常用函数