質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

831閲覧

DFで文字列の整数だけを取り出したいです。

kazketty

総合スコア1

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/25 18:40

前提・実現したいこと

pythonの練習中の者です。

sereniumでスクレイピングしてpandasでDFを取得しています
データ取得した後のDFで文字列の整数だけを取り出したいです。
取得したデータは、整数(○.○%)という形になっています

合計イベント数、ユニークイベント数の両列に
文字列の整数だけを取り出したいのですが、うまくいきません。

どうすればいいかご教示いただけないでしょうか。
よろしくお願いします。

以下DFのデータです
||ページ|合計イベント数|ユニークイベント数|
|:--|:--:|--:|
|0|ページURL|71(20.34%)|66(20.37%)|
|1|ページURL|54(16.51%)|56(17.28%)|
|2|ページURL|54(16.51%)|48(14.81%)|
|3|ページURL|49(14.98%)|44(13.58%)|
|:|:|:|
|10|ページURL|1(0.29%)|1(0.31%)|

発生している問題・エラーメッセージ

エラーはありません

該当のソースコード

#動画再生回数取得 youtubeplay = f'https://analytics.google.com/analytics/web/?authuser=2#/report/content-event-events/a121327688w179215103p177584401/_u.date00={yesterday}&_u.date01={yesterday}&explorer-table.plotKeys=%5B%5D&explorer-table.rowStart=0&explorer-table.rowCount=50&_r.drilldown=analytics.eventCategory:%E3%80%90%E8%A8%88%E6%B8%AC%E3%80%91youtube&explorer-segmentExplorer.segmentId=analytics.eventLabel/' browser.get(youtubeplay) sleep(20) youtube_iframe = browser.find_element_by_id('galaxyIframe') browser.switch_to.frame(youtube_iframe) print("フレームに切り替えました") sleep(15) #テーブル取得 elem_table = browser.find_element_by_id("ID-rowTable") html = elem_table.get_attribute('outerHTML') dfs = pd.read_html(html) moviecount = dfs[0] moviecount.set_axis([ 'Unnamed: 1_level_1', '数','ページ', '合計イベント数','ユニークイベント数', 'イベントの値', '平均値'], axis='columns', inplace=True) count_movie = moviecount.drop(['Unnamed: 1_level_1'], axis='columns') count_movie1 = count_movie.drop(['数'], axis='columns') count_movies = count_movie1.assign(取得日時 = yesterday2)

試したこと

[合計イベント数]を抽出したい場合、strでスライスを行うと
count_movies['合計イベント数'].str[:-7]
と末尾から削っても整数の値が変動する為にうまくいきません

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

python

1import pandas as pd 2 3# data作成 4page=['ページURL']*4 5events=['71(20.34%)','54(16.51%)','54(16.51%)','49(14.98%)'] 6uevents=['66(20.37%)','56(17.28%)','48(14.81%)','44(13.58%)'] 7df = pd.DataFrame({'ページ':page,'合計イベント数':events,'ユニークイベント数':uevents}) 8 9# 加工 10df["合計イベント"]=df['合計イベント数'].str.extract(r'(\d+)').astype('int') 11df["ユニークイベント"]=df['ユニークイベント数'].str.extract(r'(\d+)').astype('int') 12 13""" 14df 15 16 ページ 合計イベント数 ユニークイベント数 合計イベント ユニークイベント 170 ページURL 71(20.34%) 66(20.37%) 71 66 181 ページURL 54(16.51%) 56(17.28%) 54 56 192 ページURL 54(16.51%) 48(14.81%) 54 48 203 ページURL 49(14.98%) 44(13.58%) 49 44 21""" 22

pandas.Series.str.extractでの正規表現抽出が楽だと思います。

投稿2021/06/25 21:14

toshikawa

総合スコア388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazketty

2021/06/26 05:25

ありがとうございます!まさにやりたかった事がこれです! 正規表現を使っての抽出の方法もあるんですね もっともっと勉強しようと思います。本当にありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問