python : csvファイル , 指定した値の取得及び合計(sumif) Pandas
excelでいう、sumifの使い方です。
csvから読み込むときは、
① 指定した値を取得
② 指定した列の合計を取得
という形で組み合わせてやります。
プログラムpandasを使うので、まずはインポート
import pandas as pd
まずは、使うcsvファイルを作成します(前回と同じなので、説明は省略します。
#CSVファイルの作成
f_csv = open('csv_file.csv','w',encoding='utf-8')
#ファイルへの書き込み
f_csv.write('No'+',')
f_csv.write('Total'+'\n')
#書き込むための変数0(延べ数)
j = 0
i_0 = 0
#せっかくなので,for文で繰り返し書き込む
for i in range(1,21):
#延べの計算
j = j + i
if i > 10:
#i_0を足していく
i_0 = i_0 + 1
#回数i_0を書き込む
f_csv.write(str(i_0)+',')
#延べ数を書き込む
f_csv.write(str(j)+'\n')
else:
#回数iを書き込む
f_csv.write(str(i)+',')
#延べ数を書き込む
f_csv.write(str(j)+'\n')
#開いたcsvファイルを閉じる
f_csv.close()
ここからが本題です。
まず、csvファイルをpandasで読み取ります。
f_csv_pd = pd.read_csv('csv_file.csv')
指定した値の抽出の方法は、下記の記述します。
これを出力すると(print)このようになります。
後は、前に記事にした合計をの取得の方法は下記でしたが、
sum(f_csv_pd['Total'])
これのf_csv_pdの部分を上の
f_csv_pd[f_csv_pd['No'] == 1]か
に変更してこのように記述します。
sum(f_csv_pd[f_csv_pd.No == 1]['Total'])
分かりにくかったら
f_index_No = _csv_pd[f_csv_pd.No == 1]
とでもしておいて、
sum(f_index_No['Total'])
でもよいです。
実際に書いてみると下記のようになり、
print('len_sum1-0 : '+str(sum(f_csv_pd[f_csv_pd.No == 1]['Total'])))
print('len_sum1-1 : '+str(sum(f_csv_pd[f_csv_pd['No'] == 1]['Total'])))
print('len_sum2 : '+str(sum(f_csv_pd[f_csv_pd['No'] == 2]['Total'])))
print('len_sum3 : '+str(sum(f_csv_pd[f_csv_pd['No'] == 3]['Total'])))
結果は下記のようになります。
実はこれ、このデータがほしくて、何気に数日悩みました(苦笑)
しかも記事にしよう!と思い書こうとして、また忘れておりました。。。
ただ、おかげでまた思い出せたので、よかったです。
下記が全プログラムとなります。
import pandas as pd
#CSVファイルの作成
f_csv = open('csv_file.csv','w',encoding='utf-8')
#ファイルへの書き込み
f_csv.write('No'+',')
f_csv.write('Total'+'\n')
#書き込むための変数0(延べ数)
j = 0
i_0 = 0
#せっかくなので,for文で繰り返し書き込む
for i in range(1,21):
#延べの計算
j = j + i
if i > 10:
#i_0を足していく
i_0 = i_0 + 1
#回数i_0を書き込む
f_csv.write(str(i_0)+',')
#延べ数を書き込む
f_csv.write(str(j)+'\n')
else:
#回数iを書き込む
f_csv.write(str(i)+',')
#延べ数を書き込む
f_csv.write(str(j)+'\n')
#開いたcsvファイルを閉じる
f_csv.close()
f_csv_pd = pd.read_csv('csv_file.csv')
print('len : '+str(len(f_csv_pd)))
print('len_no : '+str(len(f_csv_pd['No'])))
print('len_total : '+str(len(f_csv_pd['Total'])))
print('sun_no : '+ str(sum(f_csv_pd['No'])))
print('sum_total : '+str(sum(f_csv_pd['Total'])))
print("")
print("")
#これで指定したNoを取得できます(下記の場合は1)
print(f_csv_pd[f_csv_pd.No == 1])
print(f_csv_pd[f_csv_pd['No'] == 1])
print('len_sum1-0 : '+str(sum(f_csv_pd[f_csv_pd.No == 1]['Total'])))
print('len_sum1-1 : '+str(sum(f_csv_pd[f_csv_pd['No'] == 1]['Total'])))
print('len_sum2 : '+str(sum(f_csv_pd[f_csv_pd['No'] == 2]['Total'])))
print('len_sum3 : '+str(sum(f_csv_pd[f_csv_pd['No'] == 3]['Total'])))
今までにpythonについて書いた記事はここにリンクを貼ってあります。
興味があればぜひご覧ください。