详解pandas.str.extract()(提取字符串)函数使用方法

  • Post category:Python

pandas.str.extract()是pandas库中str模块下的函数,它主要用于从字符串中提取符合指定模式的子字符串,并将其放入一个DataFrame中进行处理。以下是该函数的使用方法:

DataFrame.str.extract(pat, flags=0, expand=True)

参数说明:

  • pat: 需要匹配的正则表达式模式
  • flags: 传递re.compile()函数的标志;常见的标志包括IGNORECASE、MULTILINE、DOTALL、VERBOSE和U。
  • expand: 如果为True,则返回所有匹配结果,并将它们放入矩阵中。如果为False,则仅返回第一个匹配的结果,并将其转化为字符串。

示例1:提取合法邮箱地址

假设项目中有一个字符串列“email”,其中包含了一些合法的邮箱地址。我们想要从这个列表中提取出所有的邮箱地址,并单独开一个列来存储它们。可以使用以下代码:

import pandas as pd

data = {'email': ['user1@gmail.com', 'user2@163.com', 'user3@outlook.com', 'test@test']}

df = pd.DataFrame(data)

df['email_extracted'] = df['email'].str.extract(r'([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)')

print(df)

输出结果为:

               email      email_extracted
0    user1@gmail.com       user1@gmail.com
1     user2@163.com        user2@163.com
2  user3@outlook.com     user3@outlook.com
3          test@test                  NaN

可以看到,我们成功从email列中提取出了所有的合法邮箱地址。

示例2:提取姓名和手机号

假设项目中有一个不规则的字符串列包含了许多人的姓名和手机号,我们想把它们分别提取出来并新建两列来分别存储。可以使用以下代码:

import pandas as pd

data = {'info': ['张三 17712345678', '李四 13611112222', '王五 15622223333', '赵六 15988886666']}

df = pd.DataFrame(data)

df[['name', 'phone']] = df['info'].str.extract(r'(?P<name>[^0-9]+)(?P<phone>\d{11})', expand=True)

print(df)

输出结果为:

             info name         phone
0  张三 17712345678   张三  17712345678
1  李四 13611112222   李四  13611112222
2  王五 15622223333   王五  15622223333
3  赵六 15988886666   赵六  15988886666

可以看到,我们成功从info列中提取出了所有的姓名和手机号码,并分别存储在了新的name和phone列中。