[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)]
最新記事
すべて表示現象 raspberry piでfirestoreをimportしようとするとタイトルのエラーが発生。 from from firebase_admin import firestore ImportError: Failed to import the Cloud Firestore library for Python. Make sure to install the "google-clo
概要 フィッティングを行いたい場合、pythonならばscipy.optimize.leastsqなどでできます。 しかし、フィッティングを行う場合、フィッティングパラメータに条件を付けたい場合も多々あります。 例えば、下記のようにパラメータa、bは共に正の範囲で最適な値を求める、という感じです。 f(x, a, b)=a*x^2+b (a>0 and b>0) 今回はそんな手法についてご紹介しま
現象 spicy.optimizeのleastsqで最小二乗法でフィッティングをしようとしたらタイトルのエラーが発生。 from scipy import optimize import numpy as np def internalFunc1(x, plist): a=plist[0] b=plist[1] return a*x**2+b