この記事ではDataFrameにおいて行や列、行列(セル)の参照方法を紹介します。
少し応用の参照方法も紹介していますが、普通の参照方法だけを知りたい場合は大項目に記載しているのでそちらのみ見て頂ければと思います。
この記事の目標
・DataFrameの列の参照方法
・DataFrameの行の参照方法および応用
・DataFrameの行列(セル指定)の参照方法および応用
DataFrameとSeries型の違いがわからない人はまず以下の記事で理解しましょう!!
「DataFrameとSeriesの違いを紹介」
その他Pythonの記事は以下にまとめています!!
「Python記事まとめ」
[スポンサーリンク]
列の参照
列の参照を確認するために以下のDataFrameを使用します。
import pandas as pd
df=pd.DataFrame([[10,11,1],[12,13,2],[14,15,3]],index=["one","two","three"],columns=["ONE","TWO","THREE"])
#出力結果
# ONE TWO THREE
#one 10 11 1
#two 12 13 2
#three 14 15 3
列の参照方法は簡単で以下のように指定すれば参照できます。
指定のdf[column]
例えばONE列を参照する場合はこんな感じ。
print(df["ONE"])
"""
#出力結果
one 10
two 12
three 14
Name: ONE, dtype: int64
"""
ONE列の内容がSeries型で返ってきました。
行、行列の選択には2つの方法がある
次に行や行列の参照方法を紹介する前に、大きく2つの方法が存在していることを紹介します。
用途によって使い分けましょう。
以下のようにlocフィールドとilocフィールドがあります。
フィールド名 | 説明 |
loc | indexやcolumnを指定して参照 |
iloc | 行番号や列番号を指定して参照 |
具体例を紹介するために以下のDataFrameを使用します。
import pandas as pd
df=pd.DataFrame([[10,11,1],[12,13,2],[14,15,3],[16,17,4]],index=["one","two","three","four"],columns=["ONE","TWO","THREE"])
print(df)
"""
#出力結果
ONE TWO THREE
one 10 11 1
two 12 13 2
three 14 15 3
four 16 17 4
"""
例えばtwo行を参照する時、index名はtwoですが行番号で示すと1行目(最初は0行目)になります。
つまりtwo行と指定しても1行目と指定しても参照することができます。
この時にtwo行としてindexを指定する場合はlocフィールドを使用します。
print(df.loc["two"])
"""
#出力結果
ONE 12
TWO 13
THREE 2
Name: two, dtype: int64
"""
次に1行目と行番号を指定する場合はilocフィールドを使用します。
print(df.iloc[1])
"""
#出力結果
ONE 12
TWO 13
THREE 2
Name: two, dtype: int64
"""
行と列を参照する時も同じでtwo行のTWO列目を参照する場合、行番号と列番号で表すと1行目の1列目となります。
つまりtwo行のTWO列目として参照することもできますし、1行1列目として参照することもできます。
ということでそれぞれlocフィールドとilocフィールドを用いるとこんな感じで参照できます。
#loc
print(df.loc["two","TWO"])
#出力結果
#13
#iloc
print(df.iloc[1,1])
#出力結果
#13
このようにindex名やcolumn名を指定する場合はlocフィールド、行番号や列番号を指定する場合はilocフィールドを使用するということを覚えておきましょう。
行の参照
では行を参照する方法を紹介します。
確認するうえで以下のDataFrameを使用します。
import pandas as pd
df=pd.DataFrame([[10,11],[12,13],[14,15],[16,17]],index=["one","two","three","four"],columns=["ONE","TWO"])
print(df)
"""
#出力結果
ONE TWO
one 10 11
two 12 13
three 14 15
four 16 17
"""
DataFrameで行を参照するときはlocフィールドまたはilocフィールドを使用します。
2つの違いについては前述の「行、行列の選択には2つの方法がある」で紹介しています。
それぞれの表記方法は以下の通り。
参照するdf.loc[index]
参照するdf.iloc[行番号]
例えばindex名twoの行をlocで参照したい時はこんな感じになります。
print(df.loc["two"])
#出力結果
#ONE 12
#TWO 13
#Name: two, dtype: int64
ilocの場合はこんな感じ
print(df.iloc[1])
#出力結果
#ONE 12
#TWO 13
#Name: two, dtype: int64
two行の値がSeries型で表示されていることが確認できます。
指定の行間の行参照
1行目から3行目までというように指定の行間のみを参照したいという時はスライシングを使用します。
ちなみにスライシングを使用するので中身が自動的に行であると認識される関係で、locやilocフィールドを使用しなくても参照できます。
参照する時の記載方法は以下の通り
指定のdf.loc[開始のindex:終了のindex]
(指定のdf[開始のindex:終了のindex]でも可能)
指定のdf.iloc[開始の行番号:終了の行番号]
(指定のdf[開始の行番号:終了の行番号]でも可能)
確認する上で引き続き以下のDataFrameを使用します。
import pandas as pd
df=pd.DataFrame([[10,11],[12,13],[14,15],[16,17]],index=["one","two","three","four"],columns=["ONE","TWO"])
print(df)
"""
#出力結果
ONE TWO
one 10 11
two 12 13
three 14 15
four 16 17
"""
例えばtwo行からthree行までlocで参照したいときは以下のように指定します。
print(df.loc["two":"three"])
#出力結果
# ONE TWO
#two 12 13
#three 14 15
スライシングを使用するので以下でも可能
print(df["two":"three"])
#出力結果
# ONE TWO
#two 12 13
#three 14 15
ilocの場合はこんな感じ
print(df.iloc[1:3])
#出力結果
# ONE TWO
#two 12 13
#three 14 15
スライシングを使用するので以下でも可能
print(df[1:3])
#出力結果
# ONE TWO
#two 12 13
#three 14 15
このようにtwo行からthree行の値が参照できました。
最初から指定の行間までの行参照
最初の行から指定の行まで参照する時は以下のように:を最初に指定して表記することで参照します。
スライシングを使用するので中身が自動的に行であると認識される関係で、locやilocフィールドを使用しなくても参照できます。
指定のdf.loc[:終了のindex]
(指定のdf[:終了のindex]でも可能)
指定のdf.iloc[:終了の行番号]
(指定のdf[:終了の行番号]でも可能)
確認する上で引き続き以下のDataFrameを使用します。
import pandas as pd
df=pd.DataFrame([[10,11],[12,13],[14,15],[16,17]],index=["one","two","three","four"],columns=["ONE","TWO"])
print(df)
"""
#出力結果
ONE TWO
one 10 11
two 12 13
three 14 15
four 16 17
"""
例えば最初の行からthree行までをlocで参照する時はこんな感じ。
print(df.loc[:"three"])
"""
#出力結果
ONE TWO
one 10 11
two 12 13
three 14 15
"""
スライシングを使用するので以下でも可能。
vprint(df[:"three"])
"""
#出力結果
ONE TWO
one 10 11
two 12 13
three 14 15
"""
ilocの場合はこちら
print(df.iloc[:3])
"""
#出力結果
ONE TWO
one 10 11
two 12 13
three 14 15
"""
スライシングを使用するので以下でも可能。
print(df[:3])
"""
#出力結果
ONE TWO
one 10 11
two 12 13
three 14 15
"""
このようにone行からthree行まで参照できました。
指定の行から最終行の参照
逆に指定の行から最後の行まで参照したいという時は:の位置を最後にします。
スライシングを使用するので中身が自動的に行であると認識される関係で、locやilocフィールドを使用しなくても参照できます。
指定のdf.loc[開始のindex:]
(指定のdf[開始のindex:]でも可能)
指定のdf.iloc[開始の行番号:]
(指定のdf[開始の行番号:]でも可能)
確認する上で引き続き以下のDataFrameを使用します。
import pandas as pd
df=pd.DataFrame([[10,11],[12,13],[14,15],[16,17]],index=["one","two","three","four"],columns=["ONE","TWO"])
print(df)
"""
#出力結果
ONE TWO
one 10 11
two 12 13
three 14 15
four 16 17
"""
two行から最後までlocで参照する時はこんな感じ。
print(df.loc["two":])
"""
#出力結果
ONE TWO
two 12 13
three 14 15
four 16 17
"""
スライシングを使用するので以下でも可能。
print(df["two":])
"""
#出力結果
ONE TWO
two 12 13
three 14 15
four 16 17
"""
ilocの場合はこちら
print(df.iloc[1:])
"""
#出力結果
ONE TWO
two 12 13
three 14 15
four 16 17
"""
スライシングを使用するので以下でも可能。
print(df[1:])
"""
#出力結果
ONE TWO
two 12 13
three 14 15
four 16 17
"""
このようにtwo行からfour行まで参照できました。
[スポンサーリンク]
行列の参照
次に行列(セル)の参照を行います。
確認する上で以下のDataFrameを使用します。
import pandas as pd
df=pd.DataFrame([[10,11,1],[12,13,2],[14,15,3],[16,17,4]],index=["one","two","three","four"],columns=["ONE","TWO","THREE"])
"""
#出力結果
ONE TWO THREE
one 10 11 1
two 12 13 2
three 14 15 3
four 16 17 4
"""
行列を参照するにはlocフィールドまたはilocフィールドを使用します。
2つの違いについては前述の「行、行列の選択には2つの方法がある」で紹介しています。
参照する時の記載方法は以下の通り
指定のdf.loc[index、columns]
指定のdf.iloc[行番号、列番号]
例えばtwo行ONE列の数値をlocを使って参照したい場合は以下のような感じ。
print(df.loc["two","ONE"])
#出力結果
#12
ilocの場合はこちら
print(df.iloc[1,1])
#出力結果
#12
two行、ONE列にある12が参照されました。
複数の行、複数の列を参照
2行目と3行目を見るときに2列目と3列目を見たい、
1行目を見るときに2列目と3列目を見たいという時の参照方法を紹介します。
基本的に複数指定する場合はリストを使用します。
もちろん指定が1つならばリストを使う必要はありません。
指定のdf.loc[[index1,index2…],[columns1,columns2…]]
指定のdf.loc[[行番号1,行番号2…],[列番号1,列番号2…]]
確認する上で引き続き以下のDataFrameを使用します。
import pandas as pd
df=pd.DataFrame([[10,11,1],[12,13,2],[14,15,3],[16,17,4]],index=["one","two","three","four"],columns=["ONE","TWO","THREE"])
"""
#出力結果
ONE TWO THREE
one 10 11 1
two 12 13 2
three 14 15 3
four 16 17 4
"""
例えばtwo行のTWO列とTHREE列をlocで参照したい時はこんな感じ。
print(df.loc["two",["TWO","THREE"]])
#出力結果
#TWO 13
#THREE 2
#Name: two, dtype: int64
ilocの場合はこちら
print(df.iloc[1,[1,2]])
#出力結果
#TWO 13
#THREE 2
#Name: two, dtype: int64
次にtwo行とthree行のTWO列をlocで参照する時はこんな感じ。
print(df.loc[["two","three"],"TWO"])
#出力結果
#two 13
#three 15
#Name: TWO, dtype: int64
ilocの場合はこちら
print(df.iloc[[1,2],1])
#出力結果
#two 13
#three 15
#Name: TWO, dtype: int64/* Your code... */
次にtwo行とthree行のTWO列とTHREE列をlocで参照する時はこんな感じ。
print(df.loc[["two","three"],["TWO","THREE"]])
#出力結果
# TWO THREE
#two 13 2
#three 15 3
ilocの場合はこちら
print(df.iloc[[1,2],[1,2]])
#出力結果
# TWO THREE
#two 13 2
#three 15 3
すべてにおいて指定の行や列を参照できました。
特定行間の列を参照
1行目から3行目までというように指定の行間のみを参照したいという時は行列指定でもスライシングを使用します。
参照する時の記載方法は以下の通り
指定のdf.loc[開始のindex:終了のindex,column]
指定のdf.iloc[開始の行番号:終了の行番号,列番号]
確認する上で引き続き以下のDataFrameを使用します。
import pandas as pd
df=pd.DataFrame([[10,11,1],[12,13,2],[14,15,3],[16,17,4]],index=["one","two","three","four"],columns=["ONE","TWO","THREE"])
"""
#出力結果
ONE TWO THREE
one 10 11 1
two 12 13 2
three 14 15 3
four 16 17 4
"""
例えばtwo行からthree行までのTWO列をlocで参照したいときは以下のように指定します。
print(df.loc["two":"three","TWO"])
#出力結果
#two 13
#three 15
#Name: TWO, dtype: int64
ilocの場合はこんな感じ
print(df.iloc[1:3,1]) #出力結果 #two 13 #three 15 #Name: TWO, dtype: int64
two行からthree行にあるTWO列の値が参照できました。
最初から指定の行間までの列参照
最初の行から指定の行まで参照する時は以下のように表記をして参照します。
指定のdf.loc[:終了のindex,column]
指定のdf.iloc[:終了の行番号,列番号]
確認する上で引き続き以下のDataFrameを使用します。
import pandas as pd
df=pd.DataFrame([[10,11,1],[12,13,2],[14,15,3],[16,17,4]],index=["one","two","three","four"],columns=["ONE","TWO","THREE"])
"""
#出力結果
ONE TWO THREE
one 10 11 1
two 12 13 2
three 14 15 3
four 16 17 4
"""
例えば最初の行からthree行までのTWO列をlocで参照する時はこんな感じ。
print(df.loc[:"three","TWO"])
#出力結果
#one 11
#two 13
#three 15
#Name: TWO, dtype: int64
ilocの場合はこちら
print(df.iloc[:3,1])
#出力結果
#one 11
#two 13
#three 15
#Name: TWO, dtype: int64
one行からthree行までのTWO列を参照できました。
指定の行から最終行の参照
逆に指定の行から最後の行まで参照したいという時は:の位置を最後にします。
参照する時の記載方法は以下の通り
指定のdf.loc[開始のindex:,column]
指定のdf.iloc[開始の行番号:,列番号]
確認する上で引き続き以下のDataFrameを使用します。
import pandas as pd
df=pd.DataFrame([[10,11,1],[12,13,2],[14,15,3],[16,17,4]],index=["one","two","three","four"],columns=["ONE","TWO","THREE"])
"""
#出力結果
ONE TWO THREE
one 10 11 1
two 12 13 2
three 14 15 3
four 16 17 4
"""
two行から最後行までのTWO列をlocで参照する時はこんな感じ。
print(df.loc["two":,"TWO"])
#出力結果
#two 13
#three 15
#four 17
#Name: TWO, dtype: int64
ilocの場合はこちら
print(df.iloc[1:,1])
#出力結果
#two 13
#three 15
#four 17
#Name: TWO, dtype: int64
two行からfour行までのTWO列の値を参照できました。
[スポンサーリンク]
コメント
[…] ・DataFrameとSeriesの作成方法 ・DataFrameの行、列の削除と追加方法 ・DataFrameの行、列、セルの参照方法 […]