逆引き DataFrameのデータ抽出(選択)処理

DataFrameのデータ抽出処理のまとめ。こういうのでいいんだよ的なものなので、細かい内容は他の方の記事を参考にしてください。データ入出力処理は[こちら](https://qiita.com/k_maki/items/7e86b8314422cb4588f7)。

# 逆引き用の分類
何(インデックスor列名or値)を対象にどうやって(抽出条件)データを抽出したいのかにマッチする方法が何かを整理しています。おすすめの選択方法をリンク付きにしました。

| 抽出条件 | インデックス(ラベル) | 列名 | dfの値|
|:-----------|:------------|:------------|:------------|
| **= 値**<br>**isin 複数の値**           | [__df.loc__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9--%E5%80%A4-%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9-isin-%E8%A4%87%E6%95%B0%E3%81%AE%E5%80%A4) <br>df.reindex<br>df.filter<br>df.query<br>df[bools] |[__df[]__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E5%88%97%E5%90%8D--%E5%80%A4%E5%88%97%E5%90%8D-isin-%E8%A4%87%E6%95%B0%E3%81%AE%E5%80%A4)<br> [__df.loc__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E5%88%97%E5%90%8D--%E5%80%A4-%E5%88%97%E5%90%8D-isin-%E8%A4%87%E6%95%B0%E3%81%AE%E5%80%A4)<br>df.reindex<br>df.filter<br>(df.T.query.T)<br>df[bools] |[__df.query__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4--%E5%80%A4%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4-isin-%E8%A4%87%E6%95%B0%E3%81%AE%E5%80%A4)<br>df[bools]|
| **!= 値**<br>**not isin 複数の値**      | [__df.drop__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9-not-isin-%E8%A4%87%E6%95%B0%E3%81%AE%E5%80%A4) <br>df.query<br>df[bools] | [__df.drop__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E5%88%97%E5%90%8D-not-isin-%E8%A4%87%E6%95%B0%E3%81%AE%E5%80%A4)<br>(df.T.query.T)<br>df[bools] |[__df.query__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4--%E5%80%A4%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4-not-isin-%E8%A4%87%E6%95%B0%E3%81%AE%E5%80%A4)<br>df[bools]|
| **スライス**                            | df.loc |  | |
| **<,≤,>,≥ 値**                          | [__df.query__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4--%E5%80%A4) <br>df[bools] | (df.T.query.T)<br>df[bools] | [__df.query__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4--%E5%80%A4)<br>df[bools]
| **like 値**                             | [__df.filter__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9-like-%E5%80%A4)<br>[__df.query__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4-like-%E5%80%A4)<br>df[bools] | [__df.filter__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E5%88%97%E5%90%8D-like-%E5%80%A4)<br>(df.T.query.T) <br>df[bools]| [__df.query__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4-like-%E5%80%A4)<br>df[bools]|
| **正規表現** | [__df.filter__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE-search-%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9)<br>[__df.query__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE-match-%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4)<br>df[bools] | [__df.filter__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE-search-%E5%88%97%E5%90%8D)<br>(df.T.query.T)<br>df[bools] | [__df.query__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE-match-%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4)<br>df[bools]|
| **関数** |[__df.query__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E9%96%A2%E6%95%B0%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4)<br>df[bools]|(df.T.query.T)<br>df[bools]|[__df.query__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E9%96%A2%E6%95%B0%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4)<br>df[bools]|
| **上記組み合わせ(and,or,not)** | [__df.query__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4-%E3%81%AE%E6%9D%A1%E4%BB%B6%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B)<br>df[bools]|(df.T.query.T)<br>df[bools]|[__df.query__](https://qiita.com/k_maki/items/812967c8cbf26331e418#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9or-df%E3%81%AE%E5%80%A4-%E3%81%AE%E6%9D%A1%E4%BB%B6%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B)<br>df[bools]


正規表現については以下を参照。
https://qiita.com/luohao0404/items/7135b2b96f9b0b196bf3

以下のデータを対象に、次のセクション以降で具体的なデータ抽出方法を説明します。

```python
df = pd.DataFrame({'都道府県':['千葉県','三重県','北海道','神奈川県'],
                   'まいわし':[10,20,100,np.nan],
                   'かたくちいわし':[20,30,60,60],
                   'あじ':[np.nan,np.nan,100,30]}
                 ).set_index('都道府県')
```


|都道府県|まいわし|かたくちいわし|あじ|
|:---|---:|---:|---:|
|**千葉県**|10|20|NaN|
|**三重県**|20.0|30|NaN|
|**北海道**|100.0|60|100.0|
|**神奈川県**|NaN|60|30.0|

注）上の表の数字に意味はありません。神奈川でまいわしが獲れない訳でも、千葉・三重であじが獲れない訳でもありません。気分を悪くされた方がいたら申し訳ありません。私は神奈川のいわしも、千葉、三重のあじもおいしいと思っています。

# DataFrame[]
https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#slicing-ranges
https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#attribute-access
## 列名 == 値、列名 isin 複数の値
```python
df['まいわし'] # Seriesになる
# 都道府県
# 千葉県      10.0
# 三重県      20.0
# 北海道     100.0
# 神奈川県      NaN
# Name: まいわし, dtype: float64

df[['まいわし']] # DataFrameになる
# 都道府県 まいわし
# 千葉県    10.0 
# 三重県    20.0 
# 北海道    100.0
# 神奈川県   NaN 

df[['まいわし','かたくちいわし']]
# 都道府県 まいわし かたくちいわし
# 千葉県    10.0    20
# 三重県    20.0    30
# 北海道    100.0   60
# 神奈川県   NaN    60
```

# DataFrame.loc
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html#pandas.DataFrame.loc

## インデックス == 値 、インデックス isin 複数の値
```python
df.loc['千葉県'] #Seriesになる
# まいわし      10.0
# かたくちいわし 20.0
# あじ           NaN
# Name: 千葉県, dtype: float64

df.loc[['千葉県']] #DataFrameになる
# 都道府県 まいわし かたくちいわし あじ
#  千葉県    10.0        20      NaN

df.loc[['三重県','神奈川県'],:]
# 都道府県 まいわし かたくちいわし あじ
# 三重県     20.0        30      NaN
# 神奈川県    NaN         60     30.0
```

## 列名 == 値、 列名 isin 複数の値
```python
df.loc[:,'まいわし'] # Seriesになる
# 都道府県
# 千葉県      10.0
# 三重県      20.0
# 北海道     100.0
# 神奈川県      NaN
# Name: まいわし, dtype: float64

df.loc[:,['まいわし']] # DataFrameになる
# 都道府県 まいわし
# 千葉県    10.0 
# 三重県    20.0 
# 北海道    100.0
# 神奈川県   NaN 

df.loc[:,['まいわし','かたくちいわし']]
# 都道府県 まいわし かたくちいわし
# 千葉県    10.0    20
# 三重県    20.0    30
# 北海道    100.0   60
# 神奈川県   NaN    60
```
# DataFrame.reindex
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html
## インデックス isin 複数の値
```python
df.reindex(index=['三重県','神奈川県'])
# 都道府県 まいわし かたくちいわし あじ
# 三重県     20.0        30      NaN
# 神奈川県    NaN         60     30.0
```

## 列名 isin 複数の値
```python
df.reindex(columns=['まいわし','かたくちいわし'])
# 都道府県 まいわし かたくちいわし
# 千葉県    10.0    20
# 三重県    20.0    30
# 北海道    100.0   60
# 神奈川県   NaN    60
```

# DataFrame.drop
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html#pandas.DataFrame.drop
## インデックス not isin 複数の値
```python
df.drop(index=['千葉県','北海道'])
# 都道府県 まいわし かたくちいわし あじ
# 三重県     20.0        30      NaN
# 神奈川県    NaN         60     30.0
```
## 列名 not isin 複数の値
```python
df.drop(columns=['あじ'])
# 都道府県 まいわし かたくちいわし
# 千葉県    10.0    20
# 三重県    20.0    30
# 北海道    100.0   60
# 神奈川県   NaN    60
```
# DataFrame.filter
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.filter.html#pandas.DataFrame.filter
## インデックス isin 複数の値
```python
df.filter(items=['三重県','神奈川県'],axis=0) # df.loc[['三重県','神奈川県']]と同じ
# 都道府県 まいわし かたくちいわし あじ
# 三重県     20.0        30      NaN
# 神奈川県    NaN         60     30.0
```

## 列名 isin 複数の値
```python
df.filter(items=['まいわし','かたくちいわし']) # df[['まいわし','かたくちいわし']]と同じ
# 都道府県 まいわし かたくちいわし
# 千葉県    10.0    20
# 三重県    20.0    30
# 北海道    100.0   60
# 神奈川県   NaN    60
```

## インデックス like 値
```python
df.filter(like='県',axis=0)
# 都道府県 まいわし かたくちいわし あじ
# 千葉県     10.0        20      NaN
# 三重県     20.0        30      NaN
# 神奈川県    NaN         60     30.0
```

## 列名 like 値
```python
df.filter(like='いわし',axis=1)
# 都道府県 まいわし かたくちいわし
# 千葉県    10.0    20
# 三重県    20.0    30
# 北海道    100.0   60
# 神奈川県   NaN    60
```
## 正規表現 search インデックス 
```python
df.filter(regex='^..県',axis=0)
# 都道府県 まいわし かたくちいわし あじ
# 千葉県     10.0        20      NaN
# 三重県     20.0        30      NaN
```

##  正規表現 search 列名
```python
df.filter(regex='.*いわ',axis=1)
# 都道府県 まいわし かたくちいわし
# 千葉県    10.0    20
# 三重県    20.0    30
# 北海道    100.0   60
# 神奈川県   NaN    60
```

# DataFrame.query
- https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html#pandas.DataFrame.query
- https://note.nkmk.me/python-pandas-query/

## インデックス(or dfの値) == 値、インデックス(or dfの値) isin 複数の値
※ 列名に空白が含まれる場合には、列名を `(バッククォート)で囲う（rf: https://stackoverflow.com/questions/50697536/pandas-query-function-not-working-with-spaces-in-column-names）。
```python
df.query('都道府県=="千葉県"') # df.query('index=="千葉県")でもOK
# 都道府県 まいわし かたくちいわし あじ
#  千葉県    10.0        20      NaN

df.query('都道府県 in ["三重県","神奈川県"]') #df.query('都道府県==[...])でもOK
# 都道府県 まいわし かたくちいわし あじ
# 三重県     20.0        30      NaN
# 神奈川県    NaN         60     30.0

# NaNの場合は注意
df.query('まいわし.isna()', engine='python') #df.query('まいわし!=まいわし')でもOK(分かりにくいけど) 
# 都道府県 まいわし かたくちいわし あじ
# 神奈川県    NaN         60     30.0
```

## インデックス(or dfの値) != 値、インデックス(or dfの値) not isin 複数の値
```python
hokkaido = '北海道'
df.query('都道府県!=@hokkaido') #@で変数使用可
# 都道府県 まいわし かたくちいわし あじ
# 千葉県     10.0        20      NaN
# 三重県     20.0        30      NaN
# 神奈川県    NaN         60     30.0

chi_hok = ['千葉県','北海道']
df.query('都道府県 not in @chi_hok')
# 都道府県 まいわし かたくちいわし あじ
# 三重県     20.0        30      NaN
# 神奈川県    NaN         60     30.0

# NaNの場合は注意
df.query('まいわし.notna()', engine='python') #df.query('まいわし==まいわし')でもOK(分かりにくいけど) 
# 都道府県 まいわし かたくちいわし あじ
# 千葉県     10.0        20      NaN
# 三重県     20.0        30      NaN
# 北海道    100.0        60     100.0 
```
## インデックス(or dfの値) <,≤,>,≥ 値
```python
df.query('まいわし>0')
# 都道府県 まいわし かたくちいわし あじ
# 千葉県     10.0        20      NaN
# 三重県     20.0        30      NaN
# 北海道    100.0        60     100.0 
```
## インデックス(or dfの値) like 値
```python
df.query('index.str.contains("道")', engine='python')
# 都道府県 まいわし かたくちいわし あじ
# 北海道    100.0        60     100.0
```
## 正規表現 match インデックス(or dfの値) 
```python
df.query('index.str.match("^..県")', engine='python')
# 都道府県 まいわし かたくちいわし あじ
# 千葉県     10.0        20      NaN
# 三重県     20.0        30      NaN
```
## 関数(インデックス(or dfの値)) 
上の例で@を付けて変数を渡しましたが、関数を渡せば任意の関数を使って抽出できます。

```python
def is_thirty(x):
    if type(x)==str:
        return x.find('三重')>-1
    elif str(x).isdigit():
        return x==30
    else:
        return False

df.query('index.apply(@is_thirty)', engine='python')
# 都道府県 まいわし かたくちいわし あじ
# 三重県     20.0        30      NaN

df.query('かたくちいわし.apply(@is_thirty)', engine='python')
# 都道府県 まいわし かたくちいわし あじ
# 三重県     20.0        30      NaN
```
## インデックス(or dfの値) の条件組み合わせ
```python
df.query('まいわし>0 and あじ > 0')
# 都道府県 まいわし かたくちいわし あじ
# 北海道    100.0        60     100.0 

df.query('not まいわし>0')
# 都道府県 まいわし かたくちいわし あじ
# 神奈川県    NaN         60     30.0
```
# DataFrame[bools]
DataFrame[bools]は私の勝手な表現です。df[]やdf.loc[]にboolのリストを渡すと、Trueのものだけが抽出されるので、そのように書いています。詳しくは以下を参照してください。
[Python pandas データ選択処理をちょっと詳しく <中編>](http://sinhrks.hatenablog.com/entry/2014/11/15/230705)

## インデックス == 値
```python
df[df.index=='千葉県'] # df.loc[df.index=='千葉県']でもOK
# 都道府県 まいわし かたくちいわし あじ
#  千葉県    10.0        20      NaN
```
## インデックス isin 複数の値
```python
df[df.index.isin(['三重県','神奈川県'])] #df.loc[df.index.isin(['三重県','神奈川県'])]でもOK
# 都道府県 まいわし かたくちいわし あじ
# 三重県     20.0        30      NaN
# 神奈川県    NaN         60     30.0
```
## 列名 == 値
```python
df.loc[:,df.columns=='あじ'] #df[['あじ']]と同じ
# 都道府県 あじ
#  千葉県  NaN
#  三重県  NaN
#  北海道  100.0
#  神奈川県 30.0
```
## 列名 isin 複数の値
```python
df.loc[:,df.columns.isin(['まいわし','かたくちいわし'])] #df[['まいわし','かたくちいわし']]と同じ
# 都道府県 まいわし かたくちいわし
# 千葉県    10.0    20
# 三重県    20.0    30
# 北海道    100.0   60
# 神奈川県   NaN    60
```
## dfの値 == 値
```python
df[df['あじ']==30] # df.loc[df['あじ']==30]でもOK
# 都道府県 まいわし かたくちいわし あじ
#  神奈川県   NaN       60       30.0
```
## dfの値 isin 複数の値
```python
df[df['かたくちいわし'].isin([20,30])] # df.loc[df['かたくちいわし'].isin([20,30])]でもOK
# 都道府県 まいわし かたくちいわし あじ
# 千葉県     10.0        20      NaN
# 三重県     20.0        30      NaN
```
## インデックス != 値
```python
df[df.index !='北海道'] # []内は、~(df.index='北海道')でもnp.logical_not(df.index='北海道')でもOK。というかdropを使おう。
# 都道府県 まいわし かたくちいわし あじ
# 千葉県     10.0        20      NaN
# 三重県     20.0        30      NaN
# 神奈川県    NaN         60     30.0
```
## インデックス not isin 複数の値
```python
df[~(df.index.isin(['千葉県','北海道']))] # dropを使おう。
# 都道府県 まいわし かたくちいわし あじ
# 三重県     20.0        30      NaN
# 神奈川県    NaN         60     30.0
```
## 列名 != 値
```python
df.loc[:,df.columns !='あじ'] # []内は、~(df.clumns='あじ')でもnp.logical_not(df.index='あじ')でもOK。というかdropを使おう。
# 都道府県 まいわし かたくちいわし
# 千葉県    10.0    20
# 三重県    20.0    30
# 北海道    100.0   60
# 神奈川県   NaN    60
```
## 列名 not isin 複数の値
```python
df.loc[:,~(df.columns.isin(['まいわし','かたくちいわし']))] # dropを使おう
# 都道府県 あじ
#  千葉県  NaN
#  三重県  NaN
#  北海道  100.0
#  神奈川県 30.0
```
## dfの値 != 値
```python
df[df['あじ'] != 30]
# 都道府県 まいわし かたくちいわし あじ
# 千葉県     10.0        20      NaN
# 三重県     20.0        30      NaN
# 北海道    100.0        60     100.0
```
## dfの値 not isin 複数の値
```python
df[~(df['あじ'].isin([30,100]))]
# 都道府県 まいわし かたくちいわし あじ
# 千葉県     10.0        20      NaN
# 三重県     20.0        30      NaN
```
## インデックス(or 列名、dfの値) <,≤,>,≥ 値
```python
df[df['まいわし']>0] #dfの値の場合。インデックスの場合はdf.index、列名の場合はdf.columnで条件判定。
# 都道府県 まいわし かたくちいわし あじ
# 千葉県     10.0        20      NaN
# 三重県     20.0        30      NaN
# 北海道    100.0        60     100.0 
```
## インデックス(or 列名、dfの値) like 値
```python
df[df.index.str.contains('道')] #インデックスの場合。列名の場合はdf.column、dfの値の場合はdf[列名]に.str.containsをつなげる。
# 都道府県 まいわし かたくちいわし あじ
# 北海道    100.0        60     100.0
```
## 正規表現 match インデックス(or 列名、dfの値) 
```python
df[df.index.str.match('^..県')] #インデックスの場合。列名の場合はdf.column、dfの値の場合はdf[列名]に.str.matchをつなげる。
# 都道府県 まいわし かたくちいわし あじ
# 千葉県     10.0        20      NaN
# 三重県     20.0        30      NaN
```
## 関数(インデックス(or 列名、dfの値) ) 
```python
def is_thirty(x):
    if type(x)==str:
        return x.find('三重')>-1
    elif str(x).isdigit():
        return x==30
    else:
        return False
    
df[df.index.map(is_thirty)] # applyは使えない
# 都道府県 まいわし かたくちいわし あじ
# 三重県     20.0        30      NaN

df[df['かたくちいわし'].apply(is_thirty)]
# 都道府県 まいわし かたくちいわし あじ
# 三重県     20.0        30      NaN
```
## インデックス(or 列名、dfの値) の条件組み合わせ
```python
df[(df['まいわし']>0) & (df['あじ']>0)] # df.query('まいわし>0 and あじ > 0')と同じ
# 都道府県 まいわし かたくちいわし あじ
# 北海道    100.0        60     100.0 

df[~(df['まいわし']>0)]
# 都道府県 まいわし かたくちいわし あじ
# 神奈川県    NaN         60     30.0

df.loc[df['まいわし']>0,df.columns.str.contains('いわし')] #インデックスとdfの値のboolsは&や|でつなげても良いが、列名のboolsとその他はつなげられない。locの別の引数として設定する。
# 都道府県  まいわし かたくちいわし
#  千葉県    10.0       20
#  三重県    20.0       30
#  北海道   100.0       60
```

# DataFrame.xs
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.xs.html#pandas.DataFrame.xs

# 参考
- [StatsFragments Python, R, Rust, 統計, 機械学習とか](http://sinhrks.hatenablog.com/)
    - [Python pandas データ選択処理をちょっと詳しく <前編>](http://sinhrks.hatenablog.com/entry/2014/11/12/233216)
    - [Python pandas データ選択処理をちょっと詳しく <中編>](http://sinhrks.hatenablog.com/entry/2014/11/15/230705)
    - [Python pandas データ選択処理をちょっと詳しく <後編>](http://sinhrks.hatenablog.com/entry/2014/11/18/003204)
- [note.nkmk.me](https://note.nkmk.me/)
    - [pandasのインデックス参照で行・列を選択し取得](https://note.nkmk.me/python-pandas-index-row-column/)
    - [pandas.DataFrameの行を条件で抽出するquery]
(https://note.nkmk.me/python-pandas-query/)
- https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html