Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

つとむ先生のpandasドリル【列から数字だけを抜き出すには?】

f:id:kenken0326:20200325152345p:plain

f:id:kenken0326:20191021153602p:plain
tsutomu こんにちはPyQチームのtsutomuです。
pandasドリル第5回の問題は「列から数字だけを抜き出すには?」です。

つとむ先生の紹介

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

問題

f:id:kenken0326:20191021153602p:plain
tsutomu DataFrame型の変数dfclに、生徒の所属クラスが入っています。 Class列には学年とクラスが入っています。
Class列の数字だけ抜き出してDataFrameにし、変数resultに入れてください。
要素の型は整数にしてください。

DataFrame

import pandas as pd

dfcl = pd.DataFrame(
    [['Alice', '1-A'], ['Bob', '1-B']], columns=['Name', 'Class'])
dfcl
Name Class
0 Alice 1-A
1 Bob 1-B

回答

result = dfcl.Class.str.extract(r'(\d+)').astype(int)

解説

正規表現のr'(\d+)'を使うと、最初の数字のかたまりを抽出できます。
また、astype(int)で要素の型を文字列から整数に変換します。

模範回答は、dfcl.Class.str.extract(r'(\d+)').astype(int)になります。
これが、唯一の解ではありませんが、pandasを使うととてもシンプルに記述できます。

お知らせ

PyQの「pandasチャレンジ」パートではこの問題を実際に手を動かしながら学べます。
PyQで学習中の方はぜひトライしてみてください。

pyq.jp

blog.pyq.jp

前回の問題

第4問【名前にどちらかの文字を含んでいる行を除くには?】はこちらをご覧ください。

blog.pyq.jp

Copyright ©2017- BeProud Inc. All rights reserved.