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名]または[行番号]を指定する
コメント