見出し画像

Google ColabでSpreadsheetやCSVを操作したいと思った時に使えるスニペット


最近、Google Colabを使う機会が増えてきました。
自分がよく使うコードをスニペットとしてまとめました。
順次、追加していきます。

ライブラリの読み込み

# Google Colabの認証を付与する
from google.colab import userdata
from google.colab import auth
auth.authenticate_user()

# Google Spreadsheetとの連携
import gspread
from google.auth import default
creds, _ = default()
gc = gspread.authorize(creds)

Spreadsheet内の全てのシート名を取得

def main():
  # GoogleスプレッドシートのURL
  sheet_url = "https://docs.google.com/spreadsheets/d/*******"
  spreadsheet = gc.open_by_url(sheet_url)

  # シート名の一覧を取得する
  sheet_names = [sheet.title for sheet in spreadsheet.worksheets()]
  print(f"sheet_name: {sheet_names}")


if __name__ == "__main__":
    main()

シート内の値を2次元配列で取得する

def main():
  # GoogleスプレッドシートのURL
  sheet_url = "https://docs.google.com/spreadsheets/d/*************"
  spreadsheet = gc.open_by_url(sheet_url)

  # 2次元配列に変換
  original = spreadsheet.get_worksheet(0).get_all_records()
  values = [list(row.values()) for row in original]
  print(values)


if __name__ == "__main__":
    main()

シートのIDと照合して最新のシート名を取得する

def extract_sheet_id(url):
    """
    指定されたGoogle SpreadsheetのURLから gid(シートID)を抽出します。

    Args:
        url (str): Google SpreadsheetのURL。

    Returns:
        int or None: 抽出されたシートID(整数)。見つからない場合は None。
    """
    match = re.search(r"gid=(\d+)", url)
    return int(match.group(1)) if match else None  # 整数型に変換



def main():
    # GoogleスプレッドシートのURL
    sheet_url = "https://docs.google.com/spreadsheets/d/**************"
    spreadsheet = gc.open_by_url(sheet_url)

    # URLから `gid` を取得(整数型に変換)
    target_sheet_id = extract_sheet_id(sheet_url)
    sheet_name = None

    # シートの一覧を取得し、`gid` に該当するシートを探す
    for sheet in spreadsheet.worksheets():
        if sheet.id == target_sheet_id:
            sheet_name = sheet.title
            break  # 見つかったらループを抜ける

おまけ:CSV編:CSVを読み込み

pandasというライブラリが必要

def load_csv(csv_path):
    """CSVファイルを読み込み、DataFrameを返す。"""
    try:
        df = pd.read_csv(csv_path)
        return df
    except FileNotFoundError:
        print(f"エラー: ファイル {csv_path} が見つかりません。")
        return None

おまけ:CSV編:必要な列のみ読み込む

columns = [
 "ID",
  "名前",
  "部署"
]


def select_columns(df, columns):
    """
    DataFrameから指定された列を抽出する。

    Parameters
    - df : pandas.DataFrame
        元のDataFrame。
    - columns : list of str
        抽出する列名のリスト。

    Returns
    - pandas.DataFrame or None
    """

   try:
        df_selected = df[columns]
        print(df_selected)
        return df_selected
    
    except KeyError:
        print("エラー: 指定された列名が存在しません。")
        return None
    

おまけ:CSV編:条件を満たす行のみを取得

# 応募者名と選考ステップでDataFrameを取捨選択する
query = f"名前 == '{applicant_name}' and 部署 == '営業部'"
filter = filter_by_query(selected_df, query)

def filter_by_query(df, query):
    """
    DataFrameを指定されたqueryでフィルタリングする関数

    Args:
        df (pd.DataFrame): フィルタリング対象のDataFrame
        query (str): フィルタリング条件

    Returns:
        pd.DataFrame: フィルタリングされたDataFrame
    """

    filter = df.query(query)
    print(filter)
    return filter

参考記事


いいなと思ったら応援しよう!