在Pandas的数据框中,有没有一种方法可以通过链接提取正则表达式模式?
P粉770375450
P粉770375450 2023-08-16 20:25:57
0
1
481

我正在尝试从生成的Pandas表中的链接中提取正则表达式模式。

生成Pandas数据框的代码如下:

import pandas as pd import re url = 'https://www.espncricinfo.com/records/year/team-match-results/2005-2005/twenty20-internationals-3' base_url = 'https://www.espncricinfo.com' table = pd.read_html(url, extract_links = "body")[0] table = table.apply(lambda col: [link[0] if link[1] is None else f'{base_url}{link[1]}' for link in col]) table

我想从表格中的链接中提取比赛ID。对于每场比赛,比赛ID是在“t20i-”模式之后连续的数字集合,并在斜杠之前结束。例如: 对于这场比赛,比赛ID是211048。以下是用于单场比赛的代码:

scorecard_url = 'https://www.espncricinfo.com/series/australia-tour-of-new-zealand-2004-05-61407/new-zealand-vs-australia-only-t20i-211048/full-scorecard' match_id = re.findall('t20i-(d*)/', scorecard_url) match_id[0]

我想通过使用一个派生列match-id来对整个表格进行操作。该列使用Scorecard列。然而,我一直无法实现。

我最初尝试了这个简单的命令:

table['match_id']= re.findall('t20i-(d*)/', table['Scorecard']) table

我得到了一个'TypeError: expected string or bytes-like object'的错误,这让我认为链接没有存储为字符串,可能是导致问题的原因。

然后我尝试了:

table['match_id']= re.findall('t20i-(d*)/', str(table['Scorecard'])) table

这给了我一个'ValueError: Length of values (0) does not match length of index (3)'的错误,我不确定这是什么原因。

我还尝试了使用lambda函数的方法,但没有成功。如果这个方法可行,我也不介意使用它。

P粉770375450
P粉770375450

全部回复 (1)
P粉310931198

你接近了。 这将添加一个带有比赛ID的新列。

import pandas as pd import re url = 'https://www.espncricinfo.com/records/year/team-match-results/2005-2005/twenty20-internationals-3' base_url = 'https://www.espncricinfo.com' def match(row): match_id = re.findall('t20i-(\d*)/', row[1]) return match_id[0] table = pd.read_html(url, extract_links = "body")[0] table['match'] = table['Scorecard'].apply(match) print(table)

输出:

Team 1 ... match 0 (新西兰, None) ... 211048 1 (英格兰, None) ... 211028 2 (南非, None) ... 222678 [3 行 x 8 列]
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!