今回は、テーマは「Python」です。
Pythonを使って、Excel作業を効率化してみましょう。
Pythonをコーディングしていると
Excelのセルの値が文字なのか、数値なのかチェックしたいけど、どうやるの?
[/word_balloon]CSVファイルで読み込んだデータが文字列なのか、数値なのかをチェックしたいけど、どうやるの?
[/word_balloon]なんていう疑問によく直面します。
今回は、Excelのセルの値が文字なのか、数値なのかチェックする方法について、解説していきます。
この記事を読んでいただいた方の作業効率が、ちょっとでも向上できれば幸いです。
今回は、文字列が数値かどうかチェックするメソッドを3種類、ご紹介します。
文字列が数値かどうかチェックするメソッド
isdecimalメソッド | 文字列中のすべての文字が10進数で使われる文字で、かつ 1 文字以上ある場合に、「True」を返します。 |
isdigitメソッド | 文字列中のすべての文字が数字で使われる文字で、かつ 1 文字以上ある場合に、「True」を返します |
isnumericメソッド | 文字列中のすべての文字が数で使われる文字で、かつ 1 文字以上ある場合に、「True」を返します |
文字列が数値かどうかチェックするメソッドを3種類、ご紹介しました。
でも、どれを使っても結果は同じではないかと思った方も多いのではないでしょうか?
そこで、いろいろなパターンを検証していきたいと思います。
いろいろなパターンの検証
半角数値
まずは文字列が半角数値の場合です。
a = '15'
a.isdecimal()
True
a.isdigit()
True
a.isnumeric()
True
これはもちろん、全てのメソッドが数値と判断(True)できるはずです。
文字列
次に文字列が数値ではない場合です。
a = 'じゅう'
a.isdecimal()
False
a.isdigit()
False
a.isnumeric()
False
これももちろん、全てのメソッドが数値ではないと判断(False)できるはずです。
漢数字
漢数字はどうでしょうか?
a = '十'
a.isdecimal()
False
a.isdigit()
False
a.isnumeric()
True
あまり使われる頻度は少ないように思われますが、意外にもisnumericメソッドは漢数字でもちゃんと判断できるようです。
漢数字については、メソッドによって、結果が違うことがわかっていただけたはずです。
半角数値(カンマ付き)
カンマ付きの半角数値は、取り扱う機会が多いのではないでしょうか?
a = '10,000'
a.isdecimal()
False
a.isdigit()
False
a.isnumeric()
False
この結果は結構、意外ではないでしょうか。
カンマ付きの数値を判断する時は、カンマを取り除いてやる必要があるようです。
そうしないと、ちゃんと判断できませんね。
カンマ付きの数値はよく使われますが、一工夫が必要なようです。
全角数値
オペレーターによっては、取り扱う可能性はゼロではないでしょう。
a = '10000'
a.isdecimal()
True
a.isdigit()
True
a.isnumeric()
True
全角数値(カンマ付き)
こちらもオペレーターによっては、あり得るでしょう。
a = '10,000'
a.isdecimal()
False
a.isdigit()
False
a.isnumeric()
False
全角であっても、カンマなしの数字はちゃんと数値判断できていました。
半角同様、カンマ付きの全角数値の場合でも、カンマを取り除いてやれば、数値判断がちゃんとできるようです。
半角数値(マイナス)
マイナスの半角数値でも、カンマがなければ、数値と判断(True)されると思いますよね。
しかし、下の結果を見てください。
a = '-10000'
a.isdecimal()
False
a.isdigit()
False
a.isnumeric()
False
マイナスの数値は、よく使いますよね。
ただ、今回、紹介するメソッドでは「True」になってほしいのに、思ったとおりの結果にならない…。
私は例外処理を使った方法で、マイナス数値の判断をしています。
くわしくは下のリンクをご参照ください。

まとめ
今回は文字列が数値かどうか判断するメソッドを紹介しました。
Excelのシートのセルだったり、CSVファイルのデータを参照する時に数値かどうかチェックが必要になる場面って、結構、多いのではないでしょうか。
そんな時に、今回の記事を参考にしていただければ幸いです。
最後まで読んでいただき、ありがとうございました。