この記事で解決できる内容
※タップすると該当箇所までジャンプできます。
この記事では、PythonでGoogleスプレッドシートの操作を行うのに便利なライブラリ gspread の使い方について解説しています。
表計算ソフトにはExcelやスプレッドシートなどいろいろありますが、複数人で共有したりする際はブラウザで起動できるGoogleスプレッドシートが便利ですよね。
この記事では、具体的な使い方から解説しているので、gspreadのインストールや認証などの準備編については以下の記事でまとめています。
合わせて読みたい
-
【Pythonライブラリ】gspread でスプレッドシートを操作する準備・認証解説
続きを見る
gspread の使い方まとめ
gspreadとは、PythonでGoogleスプレッドシートを操作するためのライブラリです。
具体的には以下の操作が可能です。
gspreadの使い方まとめ
- スプレッドシートを開く・新規作成
- ワークシートの作成・名前の変更など
- セルの追加・削除・書き込み・更新
この記事で紹介している操作方法を学習していただければ、普段のスプレッドシートの操作を自動化できたり、より効率よくデータ分析ができるようになりますよ!!
スプレッドシートの操作
Pythonでスプレッドシートを操作する第一歩はまず、スプレッドシートとかワークブックを作成したり、すでにあるスプレッドシートを選択し、開く必要があります。
ワークブックとは、スプレッドシートのファイルのことです。
画像の赤枠一つ一つが1つ1つがワークブックです。
スプレッドシートを開く・新規作成
まずは使うスプレッドシートを開きましょう。スプレッドシートの開き方は、大きく3つあります。
違いは、「何を指定して開くか。」です。
「ファイル名で指定」「スプレッドシートキーで指定」「URLで指定」3つ方法があります。
おすすめは、スプレッドシートキーで指定する方法です。
ワークブックの選択方法3種類
#ワークブックの認証
wb = gspread.service_account(filename="./service_account.json")
#ファイル名で指定
sh = wb.open('ファイル名')
#スプレッドシートキーで指定
sh1 = wb.open_by_key('ここにスプレッドシートキーを入れる')
#URLで指定
sh2 = wb.open_by_url('ここにURLを入れる')
#スプレッドシートを新規作成
sh3 = wb.create("新しいスプレッドシートの名前")
ファイル名とはワークブックの名前のことで、今回はファイル名が「ファイル名」なので、
sh = wb.open('ファイル名')
のように記載することで指定できます。
2つ目はスプレッドシートキーでの指定です。スプレッドシートキーはURLのいち部分で確認できます。
赤ラインの部分がスプレッドシートキーです。
sh1 = wb.open_by_key('1g~~~8')
と記載すれば指定できます。
URLで指定は、URLすべてを指定すればOKです。
sh2 = wb.open_by_url('docs.google.com~~~')
全く新しい、空白のスプレッドシートを作成するときは .create() を使います。
ワークシートの操作
ワークシートとは、スプレッドシートの中の一枚一枚のページのことです。
ワークシートの操作には、「一覧を取得」「名前を取得・変更」「作成・削除」など様々な処理が可能です。
シート一覧を取得
#シート一覧を取得する
ws_list = sh.worksheets()
ワークブックにどんなシートが有るのかを取得するには、.worksheets() を使います。
一覧を取得することで、「シート名」「id」が確認できるので、後述するワークシートの選択をするときに指定する引数に利用することができます。
ワークシートを選択
ワークシートに、データを入力するには、まず「どのワークシートに入力するか」を選択しておく必要があります。
選択方法は「インデックスでの選択」「ワークシートの名前で選択」の2つの他に、先頭のワークシートだけを選択する方法の3つがあります。
#インデックスで選択
ws = sh.get_worksheet(インデックス)
#名前で選択
ws2 = sh.worksheet("ワークシート名")
#先頭のワークシートを選択(2番目以降には使えないので注意!)
ws3 = sh.sheet1
ワークシートは左から順番に、0.1.2・・・とインデックス番号が振られています。
ws = sh.get_worksheet(0)
そのインデックスを指定してワークシートを選択するのが1つ目の選択方法です。
「0」は先頭を表し、「2」は左から3番目のワークシートを表します。
インデックスを指定して選択するには、 .get_worksheet() を使います。
ws2 = sh.worksheet("ワークシート")
2つ目のワークシートの選択方法は「名前で選択」です。
ワークシートにはそれぞれ名前がついており、デフォルトでは「シート1」となっているでしょう。
ワークシート名で指定するときは、.worksheet() を使います
ws3 = sh.sheet1
3つ目は先頭のワークシートだけに使える方法です。
1つ目の「ワークシート」を選択することはできますが、ws.sheet2 のように2番目のワークシートを選択することはできませんので注意してください。
ワークシートの作成・削除
#ワークシートの作成
ws = sh.add_worksheet(title="ワークシートの名前", rows=行数, cols=列数)
#ワークシートの削除
ws.del_worksheet(選択したワークシート)
ワークシートを新たに作成するときは add_worksheet()を使います。
ws = sh.add_worksheet(title="ワークシート", rows=100, cols=20)
引数に、title = 'ワークシート名' 、 rows = 行数 、 cols = 列数 を指定して作成します。
上のコードは、ワークシート名が「ワークシート」行数が「100行」、列数が「20列」のワークシートを作成することができます。
セルの操作
残るは、セルの操作です。
セルの値を取得したり、セルに値を入力したり、指定する値が入力されているセルを探したり等様々な操作が可能です。
その中でも基本的な操作をまとめておきます。
セルのオブジェクトまとめ
#値
cell.value
#行番号
cell.row
#列番号
cell.col
セルには、値だったり、行番号、列番号の3つのオブジェクトが用意されています。
例えば、A8のセルには名前と記載されていますが、gspread的には、値が"名前"で行数が"8"、列数"1"といろいろなオブジェクトがまとまっています。
覚えておきましょう!
セルの値を取得する
#番地を指定して取得
val = worksheet.acell('番地').value
#行と列の座標を指定して取得
val2 = worksheet.cell(縦, 横).value
#指定した行すべての値を取得
val_row_ls = worksheet.row_values(何行目)
#指定した列すべての値を取得
val_col_ls = worksheet.col_values(何列目)
セルの取得には、「番地を指定」と「座標を指定」の2つの指定方法があります。
番地とは、A1とかB2とかのことで、縦横の座標とは、行番号と列番号で場所を指定することです。
val = worksheet.acell('A8').value
番地を指定して、セルの取得をするときは、 acell() を使います。
val には「名前」が格納されています。
val2 = worksheet.cell(8, 2).value
座標を指定してセルの値を取得するときは、 cell() を使います。
val2 は縦に8個、横に2個行ったところの値が入っているので、「性別」が入ってますね。
acell() も cell() も .value をつけないと、値、行番号、列番号 3つとも取得しているので、値だけを取得したい場合は.value でセルの値を取得できます。
val_row_ls = worksheet.row_values(8)
val_col_ls = worksheet.col_values(1)
print(val_row_ls)
print(val_col_ls)
#['名前', '性別', '生年月日', '趣味']
#['', '', 'A3', '', '', '', '', '名前', '高橋', '菊池', '松田', '本田', '鈴木', '豊田']
行や列の値を、一気に取得するには、それぞれ row_values() と col_values() を使うこと取得できます。
print()を使って表示させてみると、リスト形式で、最後に値が格納されているセルまですべての値を取得してくれます。
セルへの書き込み・更新
#番地を指定 ⇒ 値を入れる
worksheet.update('番地', '値')
#座標を指定 ⇒ 値を入れる
worksheet.update_cell(行番号, 列番号, '値')
#セルが複数のとき ⇒ リスト型で値を入れる
worksheet.update('番地:番地', [[1行目に入れる値], [2行目に入れる値]])
ここからは、セルに値を書き込んだり、変更したりする方法を紹介します。
値を書き込む場合は .update を使って引数に「場所、値」を入れます。
worksheet.update('A13', '鈴木')
まずは、「番地」を指定して値を入れてみましょう。
番地を指定して値を入力する場合は update() を使います。
例は "A13" に 値 "鈴木" を入れるコードです。
worksheet.update_cell(14, 1, '豊田')
番地ではなく、座標を指定することもできます。
座標を指定する場合は、.update_cell() を使います。
縦に14、横に1行ったところに "豊田" って値をいれて!を意味するコードです。
worksheet.update('B13:C14', [['男',"1990/3/9",], ["女","1988/9/19"]])
複数のセルを一気に更新することもできます。
複数のセルを一気に更新する場合は、まずは範囲を指定してから行ごとに値を入れていきます。
.update() を使います。
"B13:C14" とすることで、B13,B14,C13,C14 の4つのセルを範囲指定することができます。
値は行ごとに入れていきます。
セルの検索
#文字列を検索する方法
cell = worksheet.find("検索したいワード")
#複数を取得するには findall をつかう
cells = worksheet.find("検索したいワード")
#正規表現で検索する方法
amount_re = re.compile(r'検索したいワード')
cell_2 = worksheet.find(amount_re)
#複数を取得する
amount_re = re.compile(r'検索したいワード')
cells_2 = worksheet.findall(amount_re)
最後はセルの値を検索してみましょう。
例えば、「性別が男の人だけを取得したい」、「趣味が映画鑑賞の人だけを取得したい」ってときに使える知識です!
検索には「文字列で検索する方法」「正規表現での検索方法」の2種類あります。
「指定する文字列」が入力されているセルを探したり、「正規表現に一致する」セルを見つけたりする方法を紹介します。
cell = worksheet.find("高橋")
cell_list = worksheet.findall("男")
まずは文字列を直接指定して検索する方法です。find()を使います。
検索したいワードが複数ありそうなら、findall()を使います。
str_re = re.compile(r'松田')
cell2 = worksheet.find(str_re)
str_re2 = re.compile(r'女')
cells_list2 = worksheet.find(str_re2)
次に、正規表現を使った検索です。reモジュールを使って検索します。
正規表現ってなんだっけって人には、もう少し待ってください!只今記事を作成中です!
まとめ:gspreadはデータ分析に役立つ!
今回は gspread の基本的な使い方についてまとめました。
ここで紹介したのはあくまで基本的な使い方で、Pythonを使って他のライブラリと合わせて使うことで、データ分析だったり、スクレイピングの効率アップだったりにも役立てることができますので必ず習得しましょう!
スクレイピングとは、Webサイトからデータを収集して、自分の好きな形に解析したりできるスキルです。
例えば、ある株式Aの過去の株価を取得して来て、今回紹介したgspreadと合わせて使うことで、スプレッドシートに株価を一覧でまとめることができます。
スクレイピングについて学びたいときは、Udemyの講座を購入するのがおすすめです。
まとめ