メインコンテンツへスキップ
見出し画像
Photo byteam_world_9

【pandas入門】Google Colab でExcelを読み込み、to_dict(orient='records')で1行ずつ取り出す

    Python の pandas を練習しています。今回は Google Colab に Excel ファイルをアップロードして読み込み、1行ずつ辞書として取り出すところまでをやってみました。手元の Colab ノートブックで実際に動かしたコードと出力をそのまま載せます。

    1. 使ったデータ

    練習用に作ったダミーの社員データ(pandas_practice_dummy_data.xlsx)です。10人分で、列は次の6つです。

    • 社員ID(E0001〜E0010)

    • 氏名

    • 部署(営業部・開発部・総務部・人事部)

    • 売上金額

    • 評価(A / B / C)

    • 入社年度

    2. Colab に Excel ファイルをアップロードする

    Colab の実行環境はクラウド上にあるので、手元のファイルはそのままでは読めません。google.colab の files モジュールを使うと、セルの下にファイル選択ボタンが出てアップロードできます。

    from google.colab import files
    
    uploaded = files.upload()

    ファイルを選ぶと、次のように表示されて Colab の作業フォルダに保存されます。

    Saving pandas_practice_dummy_data.xlsx to pandas_practice_dummy_data.xlsx

    3. read_excel で読み込み、to_dict で辞書に変換する

    pd.read_excel() で Excel を DataFrame として読み込みます。DataFrame はそのまま print すると表の形で出ますが、今回は to_dict(orient='records') で「1行=1つの辞書」のリストに変換してみました。

    import pandas as pd
    
    df = pd.read_excel('pandas_practice_dummy_data.xlsx')
    print(df.to_dict(orient='records'))

    出力(先頭3件のみ抜粋):

    [{'社員ID': 'E0001', '氏名': '佐藤 健', '部署': '営業部', '売上金額': 271958, '評価': 'C', '入社年度': 2020},
     {'社員ID': 'E0002', '氏名': '鈴木 一郎', '部署': '開発部', '売上金額': 296867, '評価': 'B', '入社年度': 2023},
     {'社員ID': 'E0003', '氏名': '高橋 優', '部署': '営業部', '売上金額': 281932, '評価': 'B', '入社年度': 2015},
     ...]

    列名がキー、セルの値が値になった辞書が、行の数だけリストに並びます。

    orient の指定に注意

    最初、orient=record と引用符なしで書いていました。すると Colab の補完機能が from numpy._core.records import record という import 文を勝手に足していて、文字列ではなく numpy のオブジェクトを渡す形になっていました。

    orient に渡すのは文字列の 'records'(末尾に s)です。補完で入った不要な import は消しておきます。

    4. for 文で1行ずつ取り出す

    リストになっているので、あとは普通の for 文で回せます。enumerate() を使うと、行番号 i と行の中身 d を同時に受け取れます。辞書なので d['氏名'] のように列名で値を取り出せるのが便利です。

    import pandas as pd
    
    df = pd.read_excel('pandas_practice_dummy_data.xlsx')
    data = df.to_dict(orient='records')
    
    for i, d in enumerate(data):
        print('社員ID', d['社員ID'])
        print('氏名', d['氏名'])
        print('部署', d['部署'])

    出力(先頭2人分を抜粋):

    社員ID E0001
    氏名 佐藤 健
    部署 営業部
    社員ID E0002
    氏名 鈴木 一郎
    部署 開発部
    ...

    このコードでは i を使っていないので、for d in data: でも同じ結果になります。何行目かを表示したいときは print(i, d['氏名']) のように使えます。

    まとめ

    • Colab では files.upload() で手元のファイルをアップロードできる

    • pd.read_excel() で Excel を DataFrame として読める

    • to_dict(orient='records') で「1行=1辞書」のリストになる

    • orient には文字列 'records' を渡す(補完で入る import に注意)

    • enumerate() と組み合わせると、行番号付きで1行ずつ処理できる

    あなたへのおすすめ