データフレームの編集

始めに

どうも,ゆうき( @BASEBALLY15 )です^^

今回は,大学の友人から,Pythonのデータフレームの扱い方に関する質問を受けたので,

そのQ &Aをご紹介します.

for文』を主に使っているので,for文について勉強したい!

という方に持って来いの内容だと思います.

データフレームの扱い方に関するご質問

Question

以下の図のように,データフレームの行を6個飛ばしでまとめた後に,

元のデータフレームの各行を合計した結果を表示させたいです.

データフレームの編集について
(PowerPointで作成)

Answer

ライブラリを用意しよう!

まずは,ライブラリを用意します.

# pandas をimport (表計算をしてくれる便利なライブラリ)
import pandas as pd

#行と列の処理を行うためのライブラリ
import numpy as np

CSVファイルを保存しよう!

次に,CSVファイルを読み込みます.

今回は,以下のCSVファイルを使います.

#CSVファイルの読み込み
drop_df2 = pd.read_csv("2011-01-16_coutain_columns.csv")

#表示
drop_df2
6時間降雪量(cm)
時間名古屋岐阜関ケ原
22011/1/15 3:00000
32011/1/15 4:00000
42011/1/15 5:00000
52011/1/15 6:00000
62011/1/15 7:00000
672011/1/17 20:00000
682011/1/17 21:00000
692011/1/17 22:00000
702011/1/17 23:00000
712011/1/18 0:00000

データフレーム内の値を,6個おきに表示させよう!

データフレーム内の値を,6個おきに表示させたい場合,

drop_df2[::6]

と書きます.(セミコロンを2つ書いた後に,何個おきに表示させるのかを書きます.)

#6個おきにデータフレームを抽出
interval_6 = drop_df2[::6]

#表示
interval_6
6時間降雪量(cm)
時間名古屋岐阜関ケ原
22011/1/15 3:00000
82011/1/15 9:00000
142011/1/15 15:00000
202011/1/15 21:00000
262011/1/16 3:00002
322011/1/16 9:00010
382011/1/16 15:00441
442011/1/16 21:00140
502011/1/17 3:00003
562011/1/17 9:00023
622011/1/17 15:00000
682011/1/17 21:00000

for文を使って,6個おきにまとめよう!(重要)

まずは,データフレームを処理しやすいようにまとめます.

#drop_df2の2行目から表示する
df2_b = drop_df2[1:]

#上から8個まで表示する
df2_b.head(8)

(※本記事の容量の関係で,上から8個までのデータフレームのみを表示します.)

6時間降雪量(cm)
時間名古屋岐阜関ケ原
32011/1/15 4:00000
42011/1/15 5:00000
52011/1/15 6:00000
62011/1/15 7:00000
72011/1/15 8:00000
82011/1/15 9:00000
92011/1/15 10:00000
102011/1/15 11:00000

次に,『for文』を使って,6個ずつにまとめます.

#空のリストを用意
locate_list = []

i = 1

for i in range(12):
    
    #指定したデータフレームの行を抽出
    df10 = df2_b[6*i-6 : 6*i]
    
    #リストに抽出した結果を入れる
    locate_list.append(df10)

#表示
locate_list
                  6時間降雪量(cm)       
                時間        名古屋 岐阜 関ケ原
 3  2011/1/15 4:00          0  0   0
 4  2011/1/15 5:00          0  0   0
 5  2011/1/15 6:00          0  0   0
 6  2011/1/15 7:00          0  0   0
 7  2011/1/15 8:00          0  0   0
 8  2011/1/15 9:00          0  0   0,
                     6時間降雪量(cm)       
                  時間        名古屋 岐阜 関ケ原
 9   2011/1/15 10:00          0  0   0
 10  2011/1/15 11:00          0  0   0
 11  2011/1/15 12:00          0  0   0
 12  2011/1/15 13:00          0  0   0
 13  2011/1/15 14:00          0  0   0
 14  2011/1/15 15:00          0  0   0,
                     6時間降雪量(cm)       
                  時間        名古屋 岐阜 関ケ原
 15  2011/1/15 16:00          0  0   0
 16  2011/1/15 17:00          0  0   0
 17  2011/1/15 18:00          0  0   0
 18  2011/1/15 19:00          0  0   0
 19  2011/1/15 20:00          0  0   0
 20  2011/1/15 21:00          0  0   0,
                     6時間降雪量(cm)       
                  時間        名古屋 岐阜 関ケ原
 21  2011/1/15 22:00          0  0   0
 22  2011/1/15 23:00          0  0   0
 23   2011/1/16 0:00          0  0   0
 24   2011/1/16 1:00          0  0   0
 25   2011/1/16 2:00          0  1   0
 26   2011/1/16 3:00          0  0   2,
                    6時間降雪量(cm)       
                 時間        名古屋 岐阜 関ケ原
 27  2011/1/16 4:00          0  0   2
 28  2011/1/16 5:00          0  0   4
 29  2011/1/16 6:00          0  0   4
 30  2011/1/16 7:00          0  0   1
 31  2011/1/16 8:00          0  0   0
 32  2011/1/16 9:00          0  1   0,
                     6時間降雪量(cm)       
                  時間        名古屋 岐阜 関ケ原
 33  2011/1/16 10:00          0  0   0
 34  2011/1/16 11:00          0  1   2
 35  2011/1/16 12:00          0  0   1
 36  2011/1/16 13:00          1  0   2
 37  2011/1/16 14:00          3  2   1
 38  2011/1/16 15:00          4  4   1,
                     6時間降雪量(cm)       
                  時間        名古屋 岐阜 関ケ原
 39  2011/1/16 16:00          1  0   1
 40  2011/1/16 17:00          0  1   0
 41  2011/1/16 18:00          0  5   0
 42  2011/1/16 19:00          1  2   0
 43  2011/1/16 20:00          0  0   0
 44  2011/1/16 21:00          1  4   0,
                     6時間降雪量(cm)       
                  時間        名古屋 岐阜 関ケ原
 45  2011/1/16 22:00          0  1   0
 46  2011/1/16 23:00          0  4   0
 47   2011/1/17 0:00          0  0   1
 48   2011/1/17 1:00          0  0   1
 49   2011/1/17 2:00          0  0   2
 50   2011/1/17 3:00          0  0   3,
                    6時間降雪量(cm)       
                 時間        名古屋 岐阜 関ケ原
 51  2011/1/17 4:00          0  0   1
 52  2011/1/17 5:00          0  0   2
 53  2011/1/17 6:00          0  0   3
 54  2011/1/17 7:00          0  0   3
 55  2011/1/17 8:00          0  1   3
 56  2011/1/17 9:00          0  2   3,
                     6時間降雪量(cm)       
                  時間        名古屋 岐阜 関ケ原
 57  2011/1/17 10:00          0  0   3
 58  2011/1/17 11:00          0  0   4
 59  2011/1/17 12:00          0  0   0
 60  2011/1/17 13:00          0  0   1
 61  2011/1/17 14:00          0  0   1
 62  2011/1/17 15:00          0  0   0,
                     6時間降雪量(cm)       
                  時間        名古屋 岐阜 関ケ原
 63  2011/1/17 16:00          0  0   0
 64  2011/1/17 17:00          0  0   0
 65  2011/1/17 18:00          0  0   0
 66  2011/1/17 19:00          0  0   2
 67  2011/1/17 20:00          0  0   0
 68  2011/1/17 21:00          0  0   0]

6個にまとめた結果を,for文を使って『合計』しよう!(重要)

上ででまとめた結果を見ると,12個のグループに分かれているので,それぞれを足していきます.

まずは,『名古屋の降雪量』を合計していきます.

名古屋の降雪量

#リストに合計した値を入れたい
nagoya_snow = []

i = 1

for i in range(12):
    
    nagoya_sum = locate_list[i]["6時間降雪量(cm)"]["名古屋"].sum()
    
    nagoya_snow.append(nagoya_sum)
    

#表示
nagoya_snow

[0, 0, 0, 0, 0, 0, 8, 3, 0, 0, 0, 0]

12個のデータに分かれ,7つ目のデータの合計が『8』で,

8つ目のデータの合計が『3』になっています.

これと同じように,

『岐阜の降雪量』と『関ケ原の降雪量』も合計していきます.

岐阜の降雪量

#リストに合計した値を入れたい
gifu_snow = []

i = 1

for i in range(12):
    
    gifu_sum = locate_list[i]["6時間降雪量(cm)"]["岐阜"].sum()
    
    gifu_snow.append(gifu_sum)
    

#表示
gifu_snow

[0, 0, 0, 0, 1, 1, 7, 12, 5, 3, 0, 0]

関ケ原の積雪量

#リストに合計した値を入れたい
sekigahara_snow = []

i = 1

for i in range(12):
    
    sekigahara_sum = locate_list[i]["6時間降雪量(cm)"]["関ケ原"].sum()
    
    sekigahara_snow.append(sekigahara_sum)
     
#表示
sekigahara_snow

[0, 0, 0, 0, 2, 11, 7, 1, 7, 15, 9, 2]

データフレームに,合計した結果を上書きしよう!

ちなみに,元のデータがこれです⤵

6時間降雪量(cm)
時間名古屋岐阜関ケ原
22011/1/15 3:00000
82011/1/15 9:00000
142011/1/15 15:00000
202011/1/15 21:00000
262011/1/16 3:00002
322011/1/16 9:00010
382011/1/16 15:00441
442011/1/16 21:00140
502011/1/17 3:00003
562011/1/17 9:00023
622011/1/17 15:00000
682011/1/17 21:00000

これに,合計した結果を上書きします.

#値を書き換える
interval_6.iloc[:, 1] = nagoya_snow 

interval_6.iloc[:, 2] = gifu_snow

interval_6.iloc[:, 3] = sekigahara_snow


#合計した結果を表示
interval_6
6時間降雪量(cm)
時間名古屋岐阜関ケ原
22011/1/15 3:00000
82011/1/15 9:00000
142011/1/15 15:00000
202011/1/15 21:00000
262011/1/16 3:00012
322011/1/16 9:000111
382011/1/16 15:00877
442011/1/16 21:003121
502011/1/17 3:00057
562011/1/17 9:000315
622011/1/17 15:00009
682011/1/17 21:00002

CSVファイルに保存しよう!

最後に,CSVファイルに保存しておきます.

#CSVファイルに保存
interval_6.to_csv("(改)2011-01-16_coutain_columns.csv")

終わりに

最後まで読んでいただき,本当にありがとうございます!

今回は,大学の友人の質問内容とその回答をご紹介しました.

読者からの質問も受け付けているので,疑問に感じたら,

気軽に以下のQ &Aから質問してください^^

Q &A

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA