見出し画像

『退屈なことはPythonにやらせよう』13章 Excelスプレッドシートの操作のらくがき帳📝

こんにちは。aliceです。
今日で8月も終わりですね。残暑とはいつまでが残暑なのでしょう?

アイスは一年中おいしいです🍧


今回は『退屈なことはPythonにやらせよう』13章 Excelスプレッドシートの操作のらくがき帳です。

退屈なことはPythonにやらせよう、ExcelのことはExcelにやっていただこうなので、まったくテンションがあがりませんでした。
ごめんなさい🙇

セルのフォントの設定とか、行の高さを変えるとか、セルの結合とか、空行を入れるとか…、やるなら実際のExcelのデータをみながらやりたいです。

と思ったらやる気がどんどんなくなって、「そういうこともやろうと思えばPythonでできるんだなー、ふむふむ」と眺める程度に終わりました。

いつか必要なときがきたら、やりたいと思います。

暑いからしょうがないよねー🐼


前回のらくがき帳📝


では、以下らくがきです。


13章 英語版🔤


GitHub💖


13.4 プロジェクト:スプレッドシートからデータを読み込む


Excelからデータを読み込んで操作します。
具体的には以下のとおりです。

  1. Excelからデータを読み込む

  2. 各郡の人口調査標準地域の数を数える

  3. 各郡の人口の合計を求める

  4. 結果を表示する

アメリカの人口調査データを使うのであまりピンときませんでした。

そしてExcel操作を頑張れなかったので、pandasで遊びました🪂


こんなデータを集計します。
7万行くらいあるけど、内容がわからない。

書き出しました。


import pprint

import pandas as pd


def generate_country_data(df):
    """
    国全体のデータを生成する

    :param df: DataFrame Excelファイルのデータ
    :return: dict 国全体のデータ
    """
    country_data = {}

    grouped = df.groupby(['State', 'County'])
    for (state, county), group in grouped:
        if state not in country_data:
            country_data[state] = {}
        if county not in country_data[state]:
            country_data[state][county] = {
                'pop': group['POP2010'].sum(),
                'tracts': len(group) + 1  # tractsを+1する
            }

    return country_data


def write_result_to_file(data, filename):
    """
    結果をファイルに書き込む

    :param data: 結果のデータ
    :param filename: ファイル名
    :return:
    """
    with open(filename, 'w') as result_file:
        result_file.write('all_data = ' + pprint.pformat(data))


if __name__ == '__main__':
    df = pd.read_excel('censuspopdata.xlsx', sheet_name='Population by Census Tract')
    print(df.head())

    country_data = generate_country_data(df)

    print('結果を書き込み中...')
    write_result_to_file(country_data, 'census2010.py')
    print('完了')


13.6 プロジェクト:スプレッドシートを更新する


特定の種類の農産物をみつけて、その価格を更新します。

こんなデータがあります。

データを更新しました。


import pandas as pd


def read_produce_sales_data(file_path):
    """
    Excelファイルからデータフレームとしてデータを読み込みます。

    :param file_path: Excelファイルのパス
    :return: データフレーム
    """
    df = pd.read_excel(file_path, sheet_name='Sheet')
    return df


def update_produce_costs(df, update_dict):
    """
    データフレームの'COST PER POUND'列を更新します。

    :param df: データフレーム
    :param update_dict: 更新する辞書
    :return: 更新されたデータフレーム
    """
    df['COST PER POUND'] = df['PRODUCE'].map(update_dict).fillna(df['COST PER POUND'])
    return df


if __name__ == '__main__':
    excel_file_path = 'produceSales.xlsx'
    update_dict = {'Potatoes': 3.00, 'Garlic': 3.07, 'Celery': 1.19, 'Lemon': 1.27}

    df = read_produce_sales_data(excel_file_path)
    df_updated = update_produce_costs(df, update_dict)

    print(df_updated.head())


13.14.1 掛け算の表を作る


N×Nの掛け算の表をExcelに出力するプログラムを作りましょう。

掛け算なので9×9にしてみました。
インデックスの出力に悩みました。

import pandas as pd


def create_multiplication_table(num):
    """
    九九の表を作成する
    :param num: 作成する表のサイズ
    :return: 九九の表
    """
    multiplication_table = [[i * j for j in range(1, num + 1)] for i in range(1, num + 1)]
    return multiplication_table


def write_multiplication_table_to_excel(multiplication_table):
    """
    九九の表をExcelファイルに書き込む
    :param multiplication_table:九九の表
    :return:
    """
    df = pd.DataFrame(multiplication_table, index=range(1, len(multiplication_table) + 1),
                      columns=range(1, len(multiplication_table) + 1))
    df.to_excel('multiplication_table.xlsx', index=True, header=True)


if __name__ == '__main__':
    num = 9
    multiplication_table = create_multiplication_table(num)
    write_multiplication_table_to_excel(multiplication_table)

    print('完了')


13.14.3 行と列の入れ替え


Excelのセルの行と列を入れ替えるプログラムを書きましょう。

【before】

【after】
 CSVに書き出せば良かったかな?

import pandas as pd


def read_excel_file(file_path):
    """
    Excelファイルからデータフレームとしてデータを読み込みます。

    :param file_path: Excelファイルのパス
    :return: データフレーム
    """
    df = pd.read_excel(file_path, sheet_name='Sheet1')
    return df


def transpose_data(df):
    """
    データフレームのデータを転置します。
    :param df: データフレーム
    :return: 転置されたデータフレーム
    """
    transposed_df = df.transpose()  # 転置したデータフレームを新しい変数に割り当てる
    return transposed_df


def write_excel_file(df, file_path):
    """
    データフレームをExcelファイルに書き込みます。
    :param df: データフレーム
    :param file_path: Excelファイルのパス
    :return:
    """
    df.to_excel(file_path, index=True, header=False)


if __name__ == '__main__':
    excel_file_path = 'base.xlsx'
    df = read_excel_file(excel_file_path)
    transposed_df = transpose_data(df)  # 転置したデータフレームを新しい変数に割り当てる
    write_excel_file(transposed_df, 'transpose.xlsx')

    print('完了')


次は、Googleスプレッドシートなので、GASにできることはGASにやっていただこうとか言ってるな。

暑いからしかたないですねー。



つづき


この記事が気に入ったらサポートをしてみませんか?