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列中。