首页 > 解决方案 > 使用正则表达式从 pandas 数据框中提取元素

问题描述

来自以下数据框:

d = {'col1':['a-1524112-124', 'b-1515', 'c-584854', 'a-15154']}

df = pd.DataFrame.from_dict(d)

我的最终目标是提取熊猫系列中的字母 a、b 或 c(作为字符串)。为此,我正在使用模块中的.findall()方法re,如下所示:

# import the module
import re
# define the patterns
pat = 'a|b|c'

# extract the patterns from the elements in the specified column
df['col1'].str.findall(pat)

问题是输出,即每行中的字母 a、b 或 c,将出现在(单个元素的)列表中,如下所示:

Out[301]: 
0    [a]
1    [b]
2    [c]
3    [a]

虽然我想将字母 a、b 或 c 作为字符串,如下所示:

0    a
1    b
2    c
3    a

我知道如果我结合re.search().group()可以获得一个字符串,但如果我这样做:

df['col1'].str.search(pat).group()

我将收到以下错误消息:

AttributeError: 'StringMethods' object has no attribute 'search'

使用.str.split()不会完成这项工作,因为在我的原始数据框中,我想捕获可能包含分隔符的字符串(例如,我可能想要捕获a-b

有谁知道一个简单的解决方案,也许避免迭代操作,如 for 循环或列表理解?

标签: regexpython-3.xpandasseries

解决方案


提取物与捕获组一起使用:

import pandas as pd

d = {'col1':['a-1524112-124', 'b-1515', 'c-584854', 'a-15154']}

df = pd.DataFrame.from_dict(d)

result = df['col1'].str.extract('(a|b|c)')

print(result)

输出

   0
0  a
1  b
2  c
3  a

推荐阅读