regex - 使用正则表达式从 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 循环或列表理解?
解决方案
将提取物与捕获组一起使用:
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
推荐阅读
- javascript - JQuery AJAX 调用多次调用 URI,随调用扩展
- appium-ios - 如何滑动iOS模拟器屏幕
- r - R - 通过多个 URL 抓取网页?带着 rvest 和 purrr
- android - 带有静态图像的 HorizontalScrollView
- python - 大熊猫每条记录最近 13 个月的平均值
- python - 具有不同参数的python中的函数调度
- python - 使用 Python 3.5 在 Flask 中创建异步函数?
- java - Rest API 不能返回由其他对象组成的对象的 ArrayList
- java - 如何将 contentRoot 添加到 build.gradle
- ios - 检测何时快速按下文本字段