【python】pandasで読み込んだcsvファイルのデータを加工、追加し新しいcsvファイルとして書き出す
pandasのread_csv
で以下のようなcsvファイルをデータフレームとして読み込み、身長、体重からBMIを計算、新しくBMI列を追加しto_csv
で新しくcsvファイルを書き出します。
name | height | weight |
---|---|---|
Sato | 1.68 | 60 |
Sasaki | 1.78 | 54 |
Suzuki | 1.59 | 84 |
diagonal.csv
手順
- 身長、体重のリストを引数にBMIを計算しリストとして返す関数を作成。
- ファイル名を引数に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のリストを作成しそれを返します。
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)