我有一个数据框,我想知道在
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
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