gijyutsu-keisan.com

3.4.Pandas配列の要素取得

3.4.1.DataFramの要素取得

詳細はPandas Manual参照下さい。
サンプルDataFrameとして次のものを用います。
>>> 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. 要素の取得
  4. indexラベルの取得
  5. columnsラベルの取得

(1)行の取得

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

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

#行番号で選択する場合:values
>>> A.values[0]
array([1, 2, 3], dtype=int64)
“iloc”と“values”では取得した時の配列型が異なります。
>>> type(A.iloc[0])		#type(A.loc['a'])でも同じ
<class 'pandas.core.series.Series'>

>>> type(A.values[0])
<class 'numpy.ndarray'>
複数行を取得する場合は次のように指定します。
  • A.loc[[行名のリスト]]
  • A.iloc[[行番号のリスト]]
  • A.values[[行番号のリスト]]
列を取得する場合は“[:,”の指定が必要です (“:”は行全部の意味)。
\[ \begin{array}{ccccc} & x & y & z \\ \hline \fbox{$a$} & \color{blue}{1} & \color{blue}{2} & \color{blue}{3} \\ \hline b & 4 & 5 & 6 \\ \hline \fbox{$c$} & \color{blue}{7} & \color{blue}{8} & \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

#valuesで取得
>>> A.values[[0,2]]
array([[1, 2, 3],
[7, 8, 9]], dtype=int64)
“iloc”と“values”では取得した時の配列型が異なります。
>>> type(A.iloc[[0,2]])
<class 'pandas.core.frame.DataFrame'>

>>> type(A.values[[0,2]])
<class 'numpy.ndarray'>
行を複数連続して取得したい場合は次のように指定します。
  • A.loc[start:end] (行名で取得)
  • A.iloc[start:end] (行番号で取得)
  • A.values[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

#valuesで取得
>>> A.values[1:3]
array([[4, 5, 6],
[7, 8, 9]], dtype=int64)

節はじめに戻る


(2)列の取得

  • A['列名'] (列名で取得)
  • A.loc[:,'列名'] (列名で取得)
  • A.iloc[:,列番号] (列番号で取得)
  • A.values[:,列番号] (列番号で取得)
Aの一列目を取得します。
\[ \begin{array}{c|c|ccc} & \fbox{$x$} & y & z \\ a & \color{blue}{1} & 2 & 3 \\ b & \color{blue}{4} & 5 & 6 \\ c & \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

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

#列番号で取得
>>> A.iloc[:,[0,2]]		#A.iloc[:,[0,2]]でも同じ結果
x  z
a  1  3
b  4  6
c  7  9

#valuesで取得
>>> A.values[:,[0,2]]
array([[1, 3],
[4, 6],
[7, 9]], dtype=int64)
列を複数連続して取得したい場合は次のように指定します。
  • A.loc[:,[列名start:列名end]]
  • A.iloc[:,[列番号start:列番号end]]
  • A.values[:,[列番号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

#valuesで取得
>>> A.values[:,1:3]
array([[2, 3],
[5, 6],
[8, 9]], dtype=int64)

節はじめに戻る


(3)要素の取得

  • A.loc[行名,列名]
  • A.at[行名,列名]
  • A.iloc[行番号,列番号]
  • A.iat[行番号,列番号]
  • A.values[行番号][列番号]
\[ \begin{array}{cccc} & x & \fbox{$y$} & z \\ \fbox{$a$} & 1 & \color{blue}{2} & 3 \\ b & 4 & 5 & 6 \\ c & 7 & 8 & 9 \end{array} \]
#名称で取得
>>> A.loc['a','y']		#A.at['a','y']でも同じ結果
2

#番号で取得
>>> A.iloc[0,1]		#A.iat[0,1]、A.iloc[0,1]でも同じ結果
2

#valuesで取得
>>> A.values[0][1]
2
複数要素を取得する場合は次のように指定します。
  • A.loc[[行名リスト],[列名リスト]]
  • A.iloc[[行番号リスト],[列番号リスト]]
  • A.values[[行番号リスト]][:,[列番号]]
\[ \begin{array}{c|c|c|c} & x & y & z \\ \hline a & \color{blue}{1} & 2 & \color{blue}{3} \\ \hline b & 4 & 5 & 6 \\ \hline c & \color{blue}{7} & 8 & \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

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

>>> A.values[:2,1:]
array([[2, 3],
[5, 6]], dtype=int64)

#valuesで取得
>>> A.iloc[1:3,2:3]
z
b  6
c  9

節はじめに戻る


(4)indexラベルの取得

  • A.index
A.index
Index(['a', 'b', 'c'], dtype='object')
  • A.index[]
>>> A.index[0]
'a'

>>> A.index[[0,1]]
Index(['a', 'b'], dtype='object')

>>> A.index[:2]
Index(['a', 'b'], dtype='object')

節はじめに戻る


(5)columnsラベルの取得

  • A.columns
>>> A.columns
Index(['x', 'y', 'z'], dtype='object')
  • A.columns[]
>>> A.columns[1]
'y'

>>> A.columns[[1,2]]
Index(['y', 'z'], dtype='object')

>>> A.columns[1:]
Index(['y', 'z'], dtype='object')

節はじめに戻る

参考文献

関連ページ