如何在正则表达式Python中获取匹配的组并将其保存为新列

问题描述 投票:0回答:1

我有一个数据框,我想知道在

DocumentIdentifier
列中是否提到了我正在寻找的公司。也许应该通过正则表达式组来完成,但我不确定,目前我使用
contains()

数据如下:

GK格雷科迪 日期 来源通用名称 文档标识符
1 20160101223000-T417 sueddeutsche.de “http://www.sueddeutsche.de/wirtschaft/vw-skandal-schein-und-sein-1.2802686”
3 20151231060000-T360 focus.de “http://www.focus.de/finanzen/boerse/volkswagen-skandal-im-news-ticker-vw-betriebsrat-fordert-nachhaltigkeitsbeirat-fuer-autobauer_id_5183047.html”
4 20151231100000-T827 welt.de “http://www.welt.de/regionales/niedersachsen/article150494146/Osterloh-will-fuer-VW-Nachhaltigkeitsbeirat-mit-externen-Fachleuten.html”
5 20151231101500-T428 focus.de “http://www.focus.de/regional/wolfsburg/auto-osterloh-will-fuer-vw-nachhaltigkeitsbeirat-mit-externen-fachleuten_id_5183279.html”
6 20151231140000-T543 focus.de “http://www.focus.de/finanzen/news/wirtschaftsticker/unternehmen-osterloh-will-fuer-vw-nachhaltigkeitsbeirat-mit-externen-fachleuten_id_5183525.html”

使用

contain()
方法,可以正确过滤数据,但是我认为这不是查找它匹配的公司的正确方法。我的代码如下所示:

firm_pattern='|'.join(['adidas', 'Airbus', 'Allianz','Volkswagen','VW')
pattern = '|'.join(['welt.de','focus.de'])
results=[results[(results['DocumentIdentifier'].str.contains(f'{firm_pattern}', case=False, na=False)) & 
                                         (results['SourceCommonName'].str.contains(pattern,case=False, na=False))]

我想要的是找出它匹配的公司,并根据需要创建新列,就像新列中的第一行一样,应该写成

Firm1
。对于
vw
Firm1
中的第二行和
vw
Firm2
我发现我可以使用 

Volkswagen

方法获得组。

.group()

如何改进我的代码?

编辑:

如果您想使用我的数据,请复制此代码:

re.search(r'(volkswagen)|(vw)', 'http://www.focus.de/finanzen/boerse/volkswagen-skandal-im-news-ticker-vw-betriebsrat-fordert-nachhaltigkeitsbeirat-fuer-autobauer_id_5183047.html' ).group(0) #0-1 returns volkswagen only but it should return vw as well


python pandas regex data-cleaning string-matching
1个回答
0
投票
import pandas as pd data = { 'GKGRECORDID': [1, 3, 4, 5, 6], 'DATE': ['20160101223000-T417', '20151231060000-T360', '20151231100000-T827', '20151231101500-T428', '20151231140000-T543'], 'SourceCommonName': ['sueddeutsche.de', 'focus.de', 'welt.de', 'focus.de', 'focus.de'], 'DocumentIdentifier': [ 'http://www.sueddeutsche.de/wirtschaft/vw-skandal-schein-und-sein-1.2802686', 'http://www.focus.de/finanzen/boerse/volkswagen-skandal-im-news-ticker-vw-betriebsrat-fordert-nachhaltigkeitsbeirat-fuer-autobauer_id_5183047.html', 'http://www.welt.de/regionales/niedersachsen/article150494146/Osterloh-will-fuer-VW-Nachhaltigkeitsbeirat-mit-externen-Fachleuten.html', 'http://www.focus.de/regional/wolfsburg/auto-osterloh-will-fuer-vw-nachhaltigkeitsbeirat-mit-externen-fachleuten_id_5183279.html', 'http://www.focus.de/finanzen/news/wirtschaftsticker/unternehmen-osterloh-will-fuer-vw-nachhaltigkeitsbeirat-mit-externen-fachleuten_id_5183525.html' ] } df = pd.DataFrame(data) print(df)

方法是不错的选择。

re.findall
返回找到的变量的元组,然后可以将它们放入列表中(忽略空字符串),这很方便。
我的代码:

findall

© www.soinside.com 2019 - 2024. All rights reserved.