>>> 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
(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
Index(['a', 'b', 'c'], dtype='object')
>>> 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
Index(['x', 'y', 'z'], dtype='object')
>>> A.columns[1]
'y'
>>> A.columns[[1,2]]
Index(['y', 'z'], dtype='object')
>>> A.columns[1:]
Index(['y', 'z'], dtype='object')