跳到主要内容

Pandas 正则表达式

正则表达式(Regular Expression,简称Regex)是一种强大的工具,用于匹配、查找和操作文本数据。在Pandas中,正则表达式可以用于处理DataFrame中的文本列,帮助我们快速提取、替换或匹配特定的字符串模式。本文将介绍如何在Pandas中使用正则表达式,并通过实际案例展示其应用。

什么是正则表达式?

正则表达式是一种用于描述字符串模式的语法。它由一系列字符和特殊符号组成,可以用来匹配、查找或替换文本中的特定部分。例如,正则表达式 \d+ 可以匹配一个或多个数字。

在Pandas中,正则表达式通常与 str 访问器一起使用,用于处理DataFrame中的文本列。

基本用法

1. 使用 str.contains() 进行匹配

str.contains() 方法用于检查字符串中是否包含指定的正则表达式模式。它返回一个布尔值Series,表示每个元素是否匹配。

python
import pandas as pd

data = {'text': ['apple', 'banana', 'cherry', 'date']}
df = pd.DataFrame(data)

# 检查是否包含字母 'a'
df['contains_a'] = df['text'].str.contains(r'a')
print(df)

输出:

     text  contains_a
0 apple True
1 banana True
2 cherry False
3 date True

2. 使用 str.extract() 提取匹配内容

str.extract() 方法用于从字符串中提取与正则表达式匹配的部分。它返回一个DataFrame,其中包含提取的内容。

python
# 提取第一个字母
df['first_letter'] = df['text'].str.extract(r'^(.)')
print(df)

输出:

     text first_letter
0 apple a
1 banana b
2 cherry c
3 date d

3. 使用 str.replace() 进行替换

str.replace() 方法用于将字符串中与正则表达式匹配的部分替换为指定的内容。

python
# 将所有元音字母替换为 '*'
df['replaced_text'] = df['text'].str.replace(r'[aeiou]', '*')
print(df)

输出:

     text replaced_text
0 apple *ppl*
1 banana b*n*n*
2 cherry ch*rry
3 date d*t*

实际案例

案例1:提取电子邮件地址

假设我们有一个包含用户信息的DataFrame,其中一列是用户的电子邮件地址。我们可以使用正则表达式提取电子邮件地址的用户名部分。

python
data = {'email': ['[email protected]', '[email protected]', '[email protected]']}
df = pd.DataFrame(data)

# 提取用户名
df['username'] = df['email'].str.extract(r'^([^@]+)')
print(df)

输出:

               email username
0 [email protected] user1
1 [email protected] user2
2 [email protected] user3

案例2:清理电话号码

假设我们有一个包含电话号码的DataFrame,电话号码的格式不一致。我们可以使用正则表达式将电话号码统一为特定格式。

python
data = {'phone': ['123-456-7890', '(123) 456-7890', '123.456.7890']}
df = pd.DataFrame(data)

# 清理电话号码
df['cleaned_phone'] = df['phone'].str.replace(r'[^0-9]', '')
print(df)

输出:

             phone cleaned_phone
0 123-456-7890 1234567890
1 (123) 456-7890 1234567890
2 123.456.7890 1234567890

总结

在Pandas中使用正则表达式可以极大地简化文本处理任务。通过 str.contains()str.extract()str.replace() 等方法,我们可以轻松地匹配、提取和替换文本数据中的特定模式。正则表达式虽然强大,但也需要一定的学习和实践才能熟练掌握。

附加资源

练习

  1. 创建一个包含不同格式日期的DataFrame,使用正则表达式将日期统一为 YYYY-MM-DD 格式。
  2. 从一段文本中提取所有的URL链接,并将它们存储在一个新的DataFrame中。

通过练习这些任务,你将更好地掌握Pandas中的正则表达式操作。