93852
# やりたいこと

エクセルファイルの特定シート（シート名前が決まっている）を読み込み、取り込むべきデータかを判断したいです。  
例えば以下のような条件で不適合なデータを除く（適合するデータを抽出する）こと。

  * 必須項目で空白はNG
  * Noは1以上
  * Modelは既定の文字列以外はNG
  * TypeがCのときにはoption文字列必須でなければNG

Excelファイルを取り込むのにpandasを利用しましたが、特にpandasである必要はないです。

# 質問内容

  * pandasを利用して、DataFrameとして取り込んだ場合、条件付けして上記の抽出するにはどうしたらよいでしょうか？→ for文を回して条件付けするしかないでしょうか。
  * このような用途ならpandas+openpyxlではないほうが良いでしょうか？

# 環境

Windows 10  
Python 3.9.10

# 利用パッケージ

pandas  
openpyxl

## データサンプル

実際はエクセルシートで、[]部分は空白だと解釈して下さい。

```

    No,Name,Model,type,option
    1,D001,[],A,[]
    -1,D002,N-1,B,[]
    2,D003,N-2,C,aaa
    
```
CC BY-SA 4.0
2023-02-15T07:54:45.227
93846
2023-02-15T11:48:47.207
2023-02-15T11:48:47.207
3060
32891
question
python pandas excel
Excelデータで条件に合致しないデータを除外して取り込む方法
```

    import pandas as pd
    
    df = pd.read_excel('test.xlsx')
    
    # 必須項目
    required = ['No', 'Name', 'type']
    # Model: 規定の文字列
    models = ['N-1', 'N-2']
    
    idx = df[required].notna().all(axis=1)
    dfx = df[idx].query('No >= 1 and Model in @models and (type != "C" or option.notna())')
    print(dfx)
    
    #    No  Name Model type option
    # 2   2  D003   N-2    C    aaa
    
```
CC BY-SA 4.0
2023-02-15T09:36:44.157
93852
2023-02-15T09:36:44.157
47127
93846
answer