

pandasドリル第3回の問題は「名前に特定の文字を含んでいる行を除くには?」です。
つとむ先生の紹介
20数年、最適化関連の案件に従事するビープラウドの技術士(情報工学)。2014年より最適化のモデル作成にPythonを使い始め、効率的に開発できるようになる。東京海洋大学、青山学院大学、慶應義塾大学に非常勤講師としての勤務経験がある。また、オペレーションズ・リサーチ学会に約30年所属し、理事を2期務めた。
主な著書はモデリングの諸相、Python言語によるビジネスアナリティクス、今日から使える!組合せ最適化、データ分析ライブラリーを用いた最適化モデルの作り方
問題

'ic'が含まれている行以外を取りだすにはどうすれば良いでしょうか?
DataFrame
df = pd.DataFrame(
[
['Alice', '国語', 87],
['Alice', '算数', 72],
['Bob', '国語', 65],
['Bob', '算数', 92],
],
columns=['Name', 'Subject', 'Point'])
| Name | Subject | Point | |
|---|---|---|---|
| 0 | Alice | 国語 | 87 |
| 1 | Alice | 算数 | 72 |
| 2 | Bob | 国語 | 65 |
| 3 | Bob | 算数 | 92 |
回答
strアクセサのcontainsの否定(~)を使う
Seriesのstrアクセサのcontainsの否定(~)を使って、df[~df.Name.str.contains('ic')]のようにできます。
解説
df.Name.str.contains('ic')とすることで、'ic'を含むかどうかを判定します。
df[df.Name.str.contains('ic')]は、Name列に'ic'を含んでいる行からなるDataFrameです。
否定(~)を使って、df[~df.Name.str.contains('ic')]とすると、Name列に'ic'を含んでいない行を取得できます。
お知らせ
PyQでは「pandasチャレンジ」パートをリリースしました。
PyQで学習中の方はぜひトライしてみてください。
前回の問題
第2問【先頭2行と末尾1行を確認するには?】はこちらをご覧ください。