てんぺるのぶろぐ

IT関連のこと、体験談、備忘録など。文系エンジニア、もがきます。

Python学習メモ「PandasのSeriesやDataFrameでイテレーション」

今回はPandasのSeriesとDataFrameのイテレーターについてまとめます。下記のサイトを参考にしました。
sinhrks.hatenablog.com

イテレーションとは

なんらかの箱に格納されている要素を、繰り返し取得することです。

ここで言うなんらかの箱とはSeriesやDataFrameなどのことを指します。

実際の使い方(Seriesの場合)

大きく2つのイテレーションメソッドがあります。

1.格納されている値だけを取り出すパターン

「for 変数 in Series名:」で実行できます。

s = pd.Series([5, 10, 15], index=['X', 'Y', 'Z'])

for val in s:
    print(val)

実行結果

5
10
15

変数valには5,10,15と格納されている値が繰り返し代入されているのが分かります。

2.格納されている値とそのindexを取り出すパターン

「for 変数1, 変数2 in Series名.iteritems():」で実行できます。変数1にはindexが、変数2には値が入ります。

s = pd.Series([5, 10, 15], index=['X', 'Y', 'Z'])

for key, val in s.iteritems():
    print(key)
    print(val)
    print('')

実行結果

X
5

Y
10

Z
15

変数keyにはX,Y,Zとindexが、valには5,10,15と格納されている値が繰り返し代入されているのが分かります。

実際の使い方(DataFrameの場合)

大きく3つのイテレーションメソッドを持ちます。

1.列名だけを取り出すパターン

「for 変数 in DataFrame名:」で実行できます。

df = pd.DataFrame({'X' : [5,10,15], 
           'Y' : [20,25,30], 
           'Z' : [35,40,45]}, index=list("abc"))

print ("dfの中身")
print df
print ""

print ("「for 変数 in df:」の実行")
for col in df:
    print col
print ""

実行結果

dfの中身
    X   Y   Z
a   5  20  35
b  10  25  40
c  15  30  45for 変数 in df:」の実行
X
Y
Z

2.列名とその列の値を取り出すパターン

「for 変数1, 変数2 in DataFrame名.iteritems():」で実行できます。変数1には列名が、変数2にはその列の全要素が入ります。

df = pd.DataFrame({'X' : [5,10,15], 
           'Y' : [20,25,30], 
           'Z' : [35,40,45]}, index=list("abc"))

print ("dfの中身")
print df
print ""

print ("「for 変数1, 変数2 in df.iteritems():」の実行")
for key, col in df.iteritems():
    print (key)
    print (col)
    print ""

実行結果

dfの中身
    X   Y   Z
a   5  20  35
b  10  25  40
c  15  30  45for 変数1, 変数2 in df.iteritems():」の実行
X
a     5
b    10
c    15
Name: X, dtype: int64

Y
a    20
b    25
c    30
Name: Y, dtype: int64

Z
a    35
b    40
c    45
Name: Z, dtype: int64

3.行名とその行の値を取り出すパターン

「for 変数1, 変数2 in DataFrame名.iterrows():」で実行できます。変数1には行名が、変数2にはその行の全要素が入ります。

df = pd.DataFrame({'X' : [5,10,15], 
           'Y' : [20,25,30], 
           'Z' : [35,40,45]}, index=list("abc"))

print ("dfの中身")
print df
print ""

print ("「for 変数1, 変数2 in df.iterrows():」の実行")
for key, row in df.iterrows():
    print (key)
    print (row)
    print ""

実行結果

dfの中身
    X   Y   Z
a   5  20  35
b  10  25  40
c  15  30  45for 変数1, 変数2 in df.iterrows():」の実行
a
X     5
Y    20
Z    35
Name: a, dtype: int64

b
X    10
Y    25
Z    40
Name: b, dtype: int64

c
X    15
Y    30
Z    45
Name: c, dtype: int64

まとめ

・Seriesのイテレーション
1.格納されている値だけを取り出すパターン
→「for 変数 in Series名:」

2.格納されている値とそのindexを取り出すパターン
→「for 変数1, 変数2 in Series名.iteritems():」
変数1にはindexが、変数2には値が入る。


・DataFrameのイテレーション
1.列名だけを取り出すパターン
→「for 変数 in DataFrame名:」

2.列名とその列の値を取り出すパターン
→「for 変数1, 変数2 in DataFrame名.iteritems():」
変数1には列名が、変数2に列の全要素が入る。

3.行名とその行の値を取り出すパターン
→「for 変数1, 変数2 in DataFrame名.iterrows():」
変数1には行名が、変数2には行の全要素が入る。


Javaでいうところの「拡張for」に似ていますね。
終わり。