85
100

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PandasのDataFrameから値を取り出す色んな方法

Posted at

値を取り出す方法色々あるなぁって思います。
この他にもまだまだあるかも。

##環境
The version of the notebook server is: 5.4.0
Python 3.6.4 |Anaconda custom (64-bit)| [GCC 7.2.0]
Pandas 0.22.0

##前置き
今回使うデータはdfとdf2です。
dfはカラム名だけを指定したもの、df2はそれに加えインデックスに名前(=行ラベル)を指定しました。

データを取り出す方法はloc, iloc, ixがあります。
それぞれ行、列の指定方法に違いがあり下記のようになります。
loc: 行ラベル、 列ラベル
iloc: 行の番号(0 ~ )、列の番号(0 ~ )
ix: 行ラベル、列ラベル または 行の番号(0 ~ )、列の番号(0 ~ )

こう見るとix最強感ありますが、pandasのversionが0.20.1.以降しか使えないようです。
ちなみにバージョンは以下で確認可能です。

import pandas as pd
print(pd.__version__)

##データ

import pandas as pd

スクリーンショット 2018-06-22 9.30.35.png

df = pd.DataFrame([
    [1, 'Taro', 12],
    [2, 'Yoshiko', 25],
    [3, 'Hanako', 18],
    [4, 'Santa', 25],
    [5, 'Nobu', 16],
    [6, 'Haruka', 29]],
    columns=['id','name','score']
)

スクリーンショット 2018-06-24 11.07.51.png

# indexに名前を指定しています
df2 = pd.DataFrame([
    [1, 'Taro', 12],
    [2, 'Yoshiko', 25],
    [3, 'Hanako', 18],
    [4, 'Santa', 25],
    [5, 'Nobu', 16],
    [6, 'Haruka', 29]],
    index = ['n1', 'n2', 'n3', 'n4', 'n5', 'n6'],
    columns=['id','name','score']
)

index

###indexを指定して取り出す

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

df.loc[0]
# df2.loc[0]はエラー
df2.loc['n1']

df.iloc[0]
df2.iloc[0]

df.ix[0]
df2.ix[0]
df2.ix['n1']

スクリーンショット 2018-06-24 19.50.56.png

# <class 'pandas.core.frame.DataFrame'>

df.loc[[0]]
# df2.loc[[0]]はエラー
df2.loc[['n1']]

df.iloc[[0]]
df2.iloc[[0]]

df.ix[[0]]
df2.ix[[0]]
df2.ix[['n1']]

df[df.index == 0]
df2[df2.index == 0]
df2[df2.index == 'n1']

スクリーンショット 2018-06-22 10.28.07.png

スクリーンショット 2018-06-24 19.51.47.png

###一番最後の行を取り出す

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

# df.loc[-1]はエラー
# df2.loc[-1]はエラー

df.iloc[-1]
df2.iloc[-1]

# df.ix[-1]はエラー
df2.ix[-1]

スクリーンショット 2018-06-24 19.53.45.png

# <class 'pandas.core.frame.DataFrame'>

# df.loc[[-1]]はエラー
# df2.loc[[-1]]はエラー

df.iloc[[-1]]
df2.iloc[[-1]]

# df.ix[[-1]]はエラーではないが正しくない値が戻る
df2.ix[[-1]]

スクリーンショット 2018-06-24 10.55.22.png

###indexを複数指定して取り出す

# pandas.core.frame.DataFrame
df.loc[[0,3,5]]
# df2.loc[[0,3,5]]はエラー
df2.loc[['n1', 'n2', 'n3']]

df.iloc[[0,3,5]]
df2.iloc[[0,3,5]]

df.ix[[0,3,5]]
df2.ix[[0,3,5]]
df2.ix[['n1', 'n2', 'n3']]

スクリーンショット 2018-06-22 9.59.16.png

スクリーンショット 2018-06-24 18.42.41.png

###indexに範囲を指定して取り出す

# pandas.core.frame.DataFrame
df.loc[1:3]
df2.loc['n2':'n4']

df.iloc[1:4]
df2.iloc[1:4]

df.ix[1:3]
df2.ix[1:4]
df2.ix['n2':'n4']

スクリーンショット 2018-06-24 19.56.53.png

スクリーンショット 2018-06-24 19.57.04.png

###indexに条件を指定して取り出す

# pandas.core.frame.DataFrame
df[df.index > 2]
df2[df2.index > 'n2']

スクリーンショット 2018-06-22 10.42.40.png

スクリーンショット 2018-06-24 18.46.45.png

###複数条件

# pandas.core.frame.DataFrame
df[(df.index > 2) & (df.index < 5)]
df2[(df2.index > 'n3') & (df2.index < 'n6')]

スクリーンショット 2018-06-22 10.43.48.png

スクリーンショット 2018-06-24 18.48.05.png

column

###columnのid列を取り出す

# <class 'pandas.core.series.Series'>
df.loc[:, 'id'] # df.loc[:, 0]はエラー
df2.loc[:, 'id']

df.iloc[:, 0] # df.iloc[:, 'id']はエラー
df2.iloc[:, 0]

df.ix[:, 'id']
df2.ix[:, 'id']

df.ix[:, 0]
df2.ix[:, 0]

スクリーンショット 2018-06-24 10.18.56.png

# <class 'pandas.core.frame.DataFrame'>
df.loc[:, ['id']]
df2.loc[:, ['id']]

df.iloc[:, [0]]
df2.iloc[:, [0]]

df.ix[:, ['id']]
df2.ix[:, ['id']]

df.ix[:, [0]]
df2.ix[:, [0]]

スクリーンショット 2018-06-24 10.19.06.png

###columnに範囲指定をして取り出す

# <class 'pandas.core.frame.DataFrame'>
df.loc[:, 'id':'score']
df2.loc[:, 'id':'score']

df.iloc[:, 0:2]
df2.iloc[:, 0:2]

df.ix[:, 'id':'score']
df2.ix[:, 'id':'score']

df.ix[:, 0:2]
df2.ix[:, 0:2]

スクリーンショット 2018-06-24 18.56.34.png

スクリーンショット 2018-06-24 18.56.45.png

###columnのid列とscore列を取り出す

# <class 'pandas.core.frame.DataFrame'>
df.loc[:, ['id', 'score']]
df2.loc[:, ['id', 'score']]

df.iloc[:, [0, 1]]
df2.iloc[:, [0, 1]]

df.ix[:, ['id', 'score']]
df2.ix[:, ['id', 'score']]

df.ix[:, [0, 1]]
df2.ix[:, [0, 1]]

スクリーンショット 2018-06-24 7.55.51.png

###columnに条件を指定して取り出す

※df2の結果は省略しています

###idカラムが1のものを取り出す

df[df['id'] == 1]
#df2[df2['id'] == 1]

スクリーンショット 2018-06-22 9.41.38.png

###scoreカラムが25のものを取り出す

df[df['score'] == 25]
#df2[df2['score'] == 25]

スクリーンショット 2018-06-22 9.41.33.png

####idが3以上のものを取り出す

df[df['id'] > 3]
#df2[df2['id'] > 3]

スクリーンショット 2018-06-22 9.46.22.png

####scoreを倍にして40以上のものを取り出す

# applyとlambdaで式を書くことも可能
df.loc[df['score'].apply(lambda x: (x*2) > 40)] 
#df2.loc[df2['score'].apply(lambda x: (x*2) > 40)] 

スクリーンショット 2018-06-24 18.24.47.png

####nameの末尾がoのものを取り出す

df.loc[df['name'].str.endswith("o")]
#df2.loc[df2['name'].str.endswith("o")]

スクリーンショット 2018-06-24 18.27.34.png

###idカラムが3以上6以下のものを取り出す

df[(df['id'] > 3) & (df['id'] < 6)]
#df2[(df2['id'] > 3) & (df2['id'] < 6)]

スクリーンショット 2018-06-24 7.34.48.png

indexとcolumn

###indexが0と2('n1'と'n3')、columnのid列を取り出す

# <class 'pandas.core.series.Series'>
df.loc[[0, 2], 'id']
df2.loc[['n1', 'n3'], 'id']

df.iloc[[0, 2], 0]
df2.iloc[[0, 2], 0]

df.ix[[0, 2], 0]
df2.ix[[0, 2], 0]

df.ix[[0, 2], 'id']
df2.ix[[0, 2], 'id']
df2.ix[['n1', 'n3'], 'id']

スクリーンショット 2018-06-24 10.16.46.png

スクリーンショット 2018-06-24 20.02.54.png

# <class 'pandas.core.frame.DataFrame'>
df.loc[[0, 2], ['id']]
df2.loc[['n1', 'n3'], ['id']]

df.iloc[[0, 2], [0]]
df2.iloc[[0, 2], [0]]

df.ix[[0, 2], [0]]
df2.ix[[0, 2], [0]]

df.ix[[0, 2], ['id']]
df2.ix[[0, 2], ['id']]
df2.ix[['n1', 'n3'], ['id']]

スクリーンショット 2018-06-24 20.03.54.png

スクリーンショット 2018-06-24 20.03.22.png

####Booleanで指定で取り出す

df.loc[[True, False, True], [True]]
df2.loc[[True, False, True], [True]]

df.iloc[[True, False, True], [True]]
df2.iloc[[True, False, True], [True]]

df.ix[[True, False, True], [True]]
df2.ix[[True, False, True], [True]]

スクリーンショット 2018-06-24 10.14.41.png

スクリーンショット 2018-06-24 20.04.36.png

###範囲指定

####indexが0から2('n1'から'n3')、columnが0番から1番(idとname)を取り出す

df.loc[0:2, 'id':'name']
df2.loc['n1':'n3', 'id':'name']

df.iloc[0:3, 0:2]
df2.iloc[0:3, 0:2]

df.ix[0:2, 'id':'name']
df.ix[0:2, 0:2]
df2.ix[0:3, 'id':'name']
df2.ix['n1':'n3', 'id':'name']
df2.ix['n1':'n3', 0:2]
df2.ix[0:3, 0:2]

スクリーンショット 2018-06-24 20.05.50.png

スクリーンショット 2018-06-24 20.06.02.png

##最後に

色々ありますね。是非ご参考に。

##参考
API Reference — pandas 0.23.1 documentation
Using iloc, loc, & ix to select rows and columns in Pandas DataFrames
pandas の loc、iloc、ix の違い – python

85
100
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
85
100

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?