Diagonal M

データサイエンス系長期インターンで学んだことなど

【python】pandasで読み込んだcsvファイルのデータを加工、追加し新しいcsvファイルとして書き出す

pandasread_csvで以下のようなcsvファイルをデータフレームとして読み込み、身長、体重からBMIを計算、新しくBMI列を追加しto_csvで新しくcsvファイルを書き出します。

name height weight
Sato 1.68 60
Sasaki 1.78 54
Suzuki 1.59 84

​ diagonal.csv

手順

  1. 身長、体重のリストを引数にBMIを計算しリストとして返す関数を作成。
  2. ファイル名を引数にcsvファイルを読み込み記録されている、身長、体重で1で作った関数を用いてBMIを計算、BMI列を新たに追加し新しいcsvファイルとして書き出す関数を作成
import pandas as pd


def cal_bmi(height_list: list, weight_list: list) -> list:
    """
    BMIを計算しリストとして返す関数

    @param height_list: 身長のリスト
    @param weight_list: 体重のリスト
    @return: bmiのリスト
    """
    bmi_list = list()
    
    for height, weight in zip(height_list, weight_list):
        bmi = weight / (height ** 2)
        bmi_list.append(bmi)

    return bmi_list


def r_w_csv(filename: str) -> None:
    """
    diagonal.csvファイルをデータフレームとして読み込み身長、体重からBMIを計算
    BMI列を追加し、BMI.CSVファイルを書き出す。

    @param filename: csvファイル名
    """
    
    df = pd.read_csv(filename, encoding='utf-8')
    height_list = df['height'].tolist()  # height列をリストとして取得
    weight_list = df['weight'].tolist()  # weight列をリストとして取得

    bmi_list = cal_bmi(height_list, weight_list)  # BMIを計算しリストとして返す関数

    df['bmi'] = bmi_list
    df.to_csv('bmi.csv', index=False)


if __name__=='__main__':
    r_w_csv('diagonal.csv')

上のコードを実行すると以下のようなcsvファイルが新たに作成されます。

name height weight bmi
Sato 1.68 60 21.2585034
Sasaki 1.78 54 17.04330261
Suzuki 1.59 84 33.22653376

コード解説

BMIを計算しリストとして返す関数

def cal_bmi(height_list: list, weight_list: list) -> list:
    """
    BMIを計算しリストとして返す関数
  @param height_list: 身長のリスト
  @param weight_list: 体重のリスト
  @return: bmiのリスト
  """
    bmi_list = list()

    for height, weight in zip(height_list, weight_list):
        bmi = weight / (height ** 2)
        bmi_list.append(bmi)

    return bmi_list

身長のリストと体重のリストをfor文で回しそれぞれ計算し、bmiのリストを作成しそれを返します。

csvファイル名を引数に新しいcsvファイル作成する関数

def result_bmi(filename: str) -> None:
    """
    diagonal.csvファイルをデータフレームとして読み込み身長、体重からBMIを計算
    BMI列を追加し、BMI.CSVファイルを書き出す。

    @param filename: csvファイル名
    """
       
    df = pd.read_csv(filename, encoding='utf-8')
    height_list = df['height'].tolist()  # height列をリストとして取得
    weight_list = df['weight'].tolist()  # weight列をリストとして取得

    bmi_list = cal_bmi(height_list, weight_list)  # BMIを計算しリストとして返す関数

    df['bmi'] = bmi_list
    df.to_csv('bmi.csv', index=False)
  • pd.read_csvcsvファイルをデータフレームとして読み込む
  • df['列名'].tolist()で当該列のデータをリスト型で読み込む
  • 身長と体重のリストを引数にcal_bmi関数を実行し、bmiのリストを得る
  • データフレームにbmi列を追加しbmi_listのデータを与える
  • df.to_csvbmi.csvとして書き出す