top of page

[python]文字列が数字(小数含む)かどうか判定する


やりたいこと


与えられた文字列が数字かどうか判定したい。



問題点


pythonには文字列が数字かどうか判定するisnumeric()というメソッドがあるが、小数の場合は"."が文字と判定されてしまう。

"1".isnumeric()   
# True

"1.2".isnumeric()   
# False


解決策


小数を判定してくれるメソッドは無いようなので、自作する。

float()でキャストして、例外が発生した場合は文字列と判定する。

def is_float(x):
    
    try:
        y=float(x)
        return True
    except:
        return False
is_float("1.2")
# True

is_float("a")
# False


応用例


自分がこの問題に遭遇したのは、csvファイルからデータを読み込んで処理しているときだった。データがない部分が文字列の""になっていたり、"要確認"みたいなコメントがしてあったりする「汚い」データファイルだった。そのような場合にデータが数字の部分(もちろん小数を含む)を取り出すために上記メソッドを利用した。

import pandas as pd

#データ読み込み
df=pd.read_csv('data.csv')

#数字の部分だけ取り出す
df=df[df['data1'].map(is_float)]

最新記事

すべて表示

[Python]pandas.DataFrameをjsonで出力

概要 pythonでデータ解析を行っている。解析自体はpandasを用いて行い、最終結果はpandas.DataFrameの形式で保持されている。 この結果を他のアプリケーションで利用するため、json形式でファイル出力したい。 やり方 1 pandas.DataFrameをdictionaryに変換 data = df.to_dict(orient='records') 2 ファイルに出力 wi

[Python] 条件付きでフィッティングをする

概要 フィッティングを行いたい場合、pythonならばscipy.optimize.leastsqなどでできます。 しかし、フィッティングを行う場合、フィッティングパラメータに条件を付けたい場合も多々あります。 例えば、下記のようにパラメータa、bは共に正の範囲で最適な値を求める、という感じです。 f(x, a, b)=a*x^2+b (a>0 and b>0) 今回はそんな手法についてご紹介しま

あなたの買い物をサポートする
アプリ Shop Plan

iphone6.5p2.png

​いつ何を買うかの計画を立てられるアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

靴を大切にしよう!靴管理アプリ SHOES_KEEP

納品:iPhone6.5①.png

靴の履いた回数、お手入れ回数を管理するアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

「後で読む」を忘れないアプリ ArticleReminder

気になった​Webサイトを登録し、指定時刻にリマインダを送れるアプリです

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png
bottom of page