Pandas のデータフレームにリンクして正規表現パターンを抽出する方法はありますか?
P粉770375450
2023-08-16 20:25:57
<p>生成された Pandas テーブル内のリンクから正規表現パターンを抽出しようとしています。 </p>
<p>Pandas データ フレームを生成するコードは次のとおりです。</p>
<pre class="brush:php;toolbar:false;">パンダを pd としてインポート
輸入再
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 = "本文")[0]
table = table.apply(lambda col: [link[0] if link[1] is None else f'{base_url}{link[1]}' for link incol])
テーブル</pre>
<p>表内のリンクから一致IDを抽出したいと考えています。各ゲームのゲーム ID は、「t20i-」パターンに続き、スラッシュの前で終わる一連の数字です。例えば:
この一致の一致 ID は 211048 です。単一のゲームのコードは次のとおりです: </p>
<pre class="brush:php;toolbar:false;">scorecard_url = 'https://www.espncricinfo.com/series/australia-tour-of-new-zealand-2004-05-61407/new-ジーランド対オーストラリアのみ-t20i-211048/フルスコアカード'
match_id = re.findall('t20i-(d*)/', スコアカード_url)
match_id[0]</pre>
<p>派生列の match-id を使用してテーブル全体を操作したいと考えています。この列では、スコアカード列を使用します。しかし、私はこれを達成できませんでした。 </p>
<p>私は最初に次の単純なコマンドを試しました: </p>
<pre class="brush:php;toolbar:false;">table['match_id']= re.findall('t20i-(d*)/', table['Scorecard'])
テーブル</pre>
<p>「TypeError: Expected string or bytes-like object」エラーが表示されるため、リンクが文字列として保存されていないことが問題の原因であると考えられます。 </p>
<p>そして私は試してみました: </p>
<pre class="brush:php;toolbar:false;">table['match_id']= re.findall('t20i-(d*)/', str(table['Scorecard']))
テーブル</pre>
<p>これにより、「ValueError: 値の長さ (0) がインデックスの長さ (3) と一致しません」というエラーが発生します。原因がわかりません。 </p>
<p>ラムダ関数も使用してみましたが、成功しませんでした。この方法がうまくいくなら、私はそれを使っても構わないと思います。 </p>
あなたはもうすぐです。これにより、一致 ID を持つ新しい列が追加されます。
リーリー ###出力:### リーリー