3.2.Pandas配列の要素抽出

サンプルデータフレームとして次のものを用います。
>>> a = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns=['x','y','z'])
>>> a
   x  y  z
a  1  2  3
b  4  5  6
c  7  8  9

要素を抽出するコマンドは“loc”(列名(columns)、行名(index))、“iloc”(列番号(columns)、行番号(index))を用います。

  1. 行の抽出
  2. 列の抽出
  3. 要素の抽出

(1)行の抽出

  • A.loc['行名'] (行名で取得)
  • A.iloc[行番号] (行番号で取得)
Aの一行目を抽出します。
\[ \begin{array}{ccccc} & x & y & z \\ \hline \fbox{$a$} & \bf \color{blue}{1} & \bf \color{blue}{2} & \bf \color{blue}{3} \\ \hline b & 4 & 5 & 6 \\ c & 7 & 8 & 9 \end{array} \]
#行名で選択する場合
>>> a.loc['a']
x    1
y    2
z    3
Name: a, dtype: int64

#行番号で選択する場合
>>> a.iloc[0]
x    1
y    2
z    3
Name: a, dtype: int64

複数行を抽出する場合は次のように指定します。
  • A.loc[[行名のリスト]]
  • A.iloc[[行番号のリスト]]
列を抽出する場合は“[:,”の指定が必要です (“:”は行全部の意味)。
\[ \begin{array}{ccccc} & x & y & z \\ \hline \fbox{$a$} & \bf \color{blue}{1} & \bf \color{blue}{2} & \bf \color{blue}{3} \\ \hline b & 4 & 5 & 6 \\ \hline \fbox{$c$} & \bf \color{blue}{7} & \bf \color{blue}{8} & \bf \color{blue}{9} \end{array} \]
#行名で抽出
>>> a.loc[['a','c']]
   x  y  z
a  1  2  3
c  7  8  9

#行番号で抽出
>>> a.iloc[[0,2]]
   x  y  z
a  1  2  3
c  7  8  9

行を複数連続して抽出したい場合は次のように指定します。
  • A.loc[[start:end]] (行名で抽出)
  • A.iloc[[start:end]] (行番号で抽出)
startを省略すると“0”、endを省略すると“最終行番号+1”が適用されます。
#行名で抽出
>>> a.loc['a':'b']
   x  y  z
a  1  2  3
b  4  5  6

#行番号で抽出
>>> a.iloc[:2]
   x  y  z
a  1  2  3
b  4  5  6

>>> a.iloc[1:]
   x  y  z
b  4  5  6
c  7  8  9

>>> a.iloc[1:3]
   x  y  z
b  4  5  6
c  7  8  9

その他詳細はPandas Manual参照下さい。

節はじめに戻る


(2)列の抽出

  • A['列名'] (列名で取得)
  • A.loc[:,'列名'] (列名で取得)
  • A.iloc[:,列番号] (列番号で取得)
Aの一列目を抽出します。
\[ \begin{array}{c|c|ccc} & \fbox{$x$} & y & z \\ a & \bf \color{blue}{1} & 2 & 3 \\ b & \bf \color{blue}{4} & 5 & 6 \\ c & \bf \color{blue}{7} & 8 & 9 \end{array} \]
#列名で選択する場合
>>> a['x']
a    1
b    4
c    7
Name: x, dtype: int64

>>> a.loc[:,'x']	#面倒くさいのであえて使う必要はないかな?
a    1
b    4
c    7
Name: x, dtype: int64

>>> a.loc[:,['x']]	#面倒くさいのであえて使う必要はないかな?
   x
a  1
b  4
c  7

#列番号で選択する場合
>>> a.iloc[:,0]
a    1
b    4
c    7
Name: x, dtype: int64

複数列を抽出する場合は次のように指定します。
  • A.loc[:,[列名のリスト]]
  • A.iloc[:,[列番号のリスト]]
列を抽出する場合は“[:,”の指定が必要です (“:”は行全部の意味)。
\[ \begin{array}{c|c|c|c} & \fbox{$x$} & y & \fbox{$z$} \\ a & \bf \color{blue}{1} & 2 & \bf \color{blue}{3} \\ b & \bf \color{blue}{4} & 5 & \bf \color{blue}{6} \\ c & \bf \color{blue}{7} & 8 & \bf \color{blue}{9} \end{array} \]
#列名で抽出
>>> a.loc[:,['x','z']]
   x  z
a  1  3
b  4  6
c  7  9

#列番号で抽出
>>> a.iloc[:,[0,2]]
   x  z
a  1  3
b  4  6
c  7  9

列を複数連続して抽出したい場合は次のように指定します。
  • A.loc[:,[列名start:列名end]]
  • A.iloc[:,[列番号start:列番号end]]
startを省略すると“0”、endを省略すると“最終列番号+1”が適用されます。
#列名で抽出
>>> a.loc[:,'x':'y']
   x  y
a  1  2
b  4  5
c  7  8

#列番号で抽出
>>> a.iloc[:,:2]
   x  y
a  1  2
b  4  5
c  7  8

>>> a.iloc[:,1:]
   y  z
a  2  3
b  5  6
c  8  9

>>> a.iloc[:,1:3]
   y  z
a  2  3
b  5  6
c  8  9

その他詳細はPandas Manual参照下さい。

節はじめに戻る


(3)要素の抽出

  • A.loc[行名,列名]
  • A.iloc[行番号,列番号]
\[ \begin{array}{cccc} & x & \fbox{$y$} & z \\ \fbox{$a$} & 1 & \bf \color{blue}{2} & 3 \\ b & 4 & 5 & 6 \\ c & 7 & 8 & 9 \end{array} \]
#名称で抽出
>>> A.loc['a','y']
2

#番号で抽出
>>> A.iloc[0,1]
2

複数要素を抽出する場合は次のように指定します。
  • A.loc[[行名リスト],[列名リスト]]
  • A.iloc[[行番号リスト],[列番号リスト]]
\[ \begin{array}{c|c|c|c} & x & y & z \\ \hline a & \bf \color{blue}{1} & 2 & \bf \color{blue}{3} \\ \hline b & 4 & 5 & 6 \\ \hline c & \bf \color{blue}{7} & 8 & \bf \color{blue}{9} \end{array} \]
#名称で抽出
>>> A.loc[['a','c'],['x','z']]
   x  z
a  1  3
c  7  9

#番号で抽出
>>> A.iloc[[0,2],[0,2]]
   x  z
a  1  3
c  7  9


複数要素を連番で抽出する場合は次のように指定します。
  • A.loc[[行名start:行名end],[列名start:列名end]]
  • A.iloc[[行番号start:行番号end],[列番号start:列番号end]]
行/列startを省略すると“0”、行/列endを省略すると“最終列番号+1”が適用されます。
#番号で抽出
>>> A.iloc[:2,1:]
   y  z
a  2  3
b  5  6

>>> A.iloc[1:3,2:3]
   z
b  6
c  9

節はじめに戻る


参考文献