pandas dataframe 行 取得

pandas のdataframeから行のデータを取得(抽出)する方法

index名で取得するときは

df.loc[index名のリスト]

行番号で取得するときは

df.iloc[行番号のリスト]

index名で取得【loc】

import pandas as pd
import numpy as np

# DataFrame作成
df = pd.DataFrame([[25,'pika',88,'Electric',np.NaN,np.NaN],
                   [131,'rara',80,'Water','Ice',np.NaN],
                   [143,'gon',82,'Normal',np.NaN,np.NaN],
                   [3,'fushi',84,'Grass','Poison',np.NaN],
                   [6,'kage',84,'Fire','Flying',np.NaN],
                   [9,'kame',84,'Water',np.NaN,np.NaN]],
                  columns=['no','name','level','type1','type2','helditem'],
                  index=['party1','party2','party3','party4','party5','party6'])

# 行の取得
print(df.loc[['party3']])

"""
         no name  level   type1 type2  helditem
party3  143  gon     82  Normal   NaN       NaN
"""

任意の複数行を取得

index名のリストを作成してそのまま入力

# 行の取得
print(df.loc[['party1','party3']])

"""
         no  name  level     type1 type2  helditem
party1   25  pika     88  Electric   NaN       NaN
party3  143   gon     82    Normal   NaN       NaN
"""

連続する複数行を取得

連続する複数行を指定する場合はリストではなくコロンで指定する

# 行の取得
print(df.loc['party3':'party5'])

"""
         no   name  level   type1   type2  helditem
party3  143    gon     82  Normal     NaN       NaN
party4    3  fushi     84   Grass  Poison       NaN
party5    6   kage     84    Fire  Flying       NaN
"""

ちなみに
コロンの前を省略すると先頭行から、
コロンの後を省略すると最終行まで、
前後を省略するとすべて

# 先頭行から
print(df.loc[:'party2'])

"""
         no  name  level     type1 type2  helditem
party1   25  pika     88  Electric   NaN       NaN
party2  131  rara     80     Water   Ice       NaN
"""

# 最終行まで
print(df.loc['party4':])

"""
        no   name  level  type1   type2  helditem
party4   3  fushi     84  Grass  Poison       NaN
party5   6   kage     84   Fire  Flying       NaN
party6   9   kame     84  Water     NaN       NaN
"""

# すべて
print(df.loc[:])

"""
         no   name  level     type1   type2  helditem
party1   25   pika     88  Electric     NaN       NaN
party2  131   rara     80     Water     Ice       NaN
party3  143    gon     82    Normal     NaN       NaN
party4    3  fushi     84     Grass  Poison       NaN
party5    6   kage     84      Fire  Flying       NaN
party6    9   kame     84     Water     NaN       NaN
"""

行番号で取得【iloc】

import pandas as pd
import numpy as np

# DataFrame作成
df = pd.DataFrame([[25,'pika',88,'Electric',np.NaN,np.NaN],
                   [131,'rara',80,'Water','Ice',np.NaN],
                   [143,'gon',82,'Normal',np.NaN,np.NaN],
                   [3,'fushi',84,'Grass','Poison',np.NaN],
                   [6,'kage',84,'Fire','Flying',np.NaN],
                   [9,'kame',84,'Water',np.NaN,np.NaN]],
                  columns=['no','name','level','type1','type2','helditem'],
                  index=['party1','party2','party3','party4','party5','party6'])

# 行の取得
print(df.iloc[[2]])

"""
         no name  level   type1 type2  helditem
party3  143  gon     82  Normal   NaN       NaN
"""

行番号で指定するとき先頭行番号は[0]のため、[2]を指定すると3行目のデータを取得する

任意の複数行を取得

行番号のリストを作成してそのまま入力

# 行の取得
print(df.iloc[[0,2]])

"""
         no  name  level     type1 type2  helditem
party1   25  pika     88  Electric   NaN       NaN
party3  143   gon     82    Normal   NaN       NaN
"""

連続する複数行を取得

連続する複数行を指定する場合はリストではなくコロンで指定する

# 行の取得
print(df.iloc[2:5])

"""
         no   name  level   type1   type2  helditem
party3  143    gon     82  Normal     NaN       NaN
party4    3  fushi     84   Grass  Poison       NaN
party5    6   kage     84    Fire  Flying       NaN
"""

※[2:5]の意味は2以上5未満である
 index名で指定した時と同じ感覚で2行目から4行目を取得したいと考えて[2:4]とすると2以上4未満で2,3行目しか取得できないので注意

index名で指定した時と同じく
コロンの前を省略すると先頭行から、
コロンの後を省略すると最終行まで、
前後を省略するとすべて

# 先頭行から
print(df.iloc[:2])

"""
         no  name  level     type1 type2  helditem
party1   25  pika     88  Electric   NaN       NaN
party2  131  rara     80     Water   Ice       NaN
"""

# 最終行まで
print(df.iloc[3:])

"""
        no   name  level  type1   type2  helditem
party4   3  fushi     84  Grass  Poison       NaN
party5   6   kage     84   Fire  Flying       NaN
party6   9   kame     84  Water     NaN       NaN
"""

# すべて
print(df.iloc[:])

"""
         no   name  level     type1   type2  helditem
party1   25   pika     88  Electric     NaN       NaN
party2  131   rara     80     Water     Ice       NaN
party3  143    gon     82    Normal     NaN       NaN
party4    3  fushi     84     Grass  Poison       NaN
party5    6   kage     84      Fire  Flying       NaN
party6    9   kame     84     Water     NaN       NaN
"""

1行だけ取得するときの注意(Seriesで出力)

DataFrameで取得しようとしてdf.loc[['party3']]としなければならないところをdf.loc['party3']としてしまうとSeriesでの取得となってしまう

# 行の取得
print(df.loc['party3'])

"""
no             143
name           gon
level           82
type1       Normal
type2          NaN
helditem       NaN
Name: party3, dtype: object
"""

# 型の確認
print(type(df.loc['party3']))

"""
<class 'pandas.core.series.Series'>
"""

行番号で指定するときも同じで、df.iloc[[2]]としなければならないところdf.iloc[2]としてしまうと上記と同じ結果となる

逆にSeriesで取得したいときはリストでなく直接、[index名]または[行番号]を指定する

コメント

タイトルとURLをコピーしました