2017-02-07 12 views
0

浮動小数点/倍精度/整数を文字列からどのように分けることができますか。基本的にはパンダの列に値があります。 例えば:列の値から浮動小数点/倍精度/整数を除きます

150.39999389648438cfm 
0.30000001192092896inHO 
63.70000076293945% 
73.0999984741211F 
85.9000015258789kW 
75.5F 
100% 
44S 
32F 
false 
NA 
true 

私の結果セットには、任意のアルファベット/特殊文字のない値になります。

150.39999389648438 
0.30000001192092896 
63.70000076293945 
73.0999984741211 
85.9000015258789 
75.5 
100 
44 
32 
false 

true 

現在、私はこのためにreを使用しています。私はもっ​​と最適化された何かを探しています。

def is_alphanumeric(inst): 
    return re.search("(\d)+.(\d)+[a-z]+$", inst) 
is_alphanumeric(str(df.iloc[0][i])): 
      df.iloc[:, i] = df.iloc[:, i].apply(lambda x:float(''.join(ele for ele in x if ele.isdigit() or ele == '.'))) 


is_percentage(str(df.iloc[0][i])): 
df.iloc[:, i] = df.iloc[:, i].apply(lambda x:float(''.join(ele for  ele  in  x  if  ele.isdigit()  or  ele == '.'))) 
+1

が見えます終わり。あなたは '\ D + $'正規表現でそれを行うことができます。 –

+0

@WiktorStribiżewは、あなたが 'replace'を使ってこれを行うことを示唆しています:' df [col] .astype(str).str.replace( '(\ D + $)()'、 '') ' – EdChum

+0

真偽値もブール値になります。だから私はこれらの値が変更されていないことを確認する必要があります –

答えて

0
  • を検索:^.*?\b(?:(\d+(?:\.\d+)?|true|false))\b.*?$
  • と交換してください:$1

説明:あなただけの非数値文字を取り除く必要があるよう

^     : start of string 
.*?     : 0 or more any char 
\b     : word boundary 
(?:     : non capture group 
    (    : group 1 
    \d+(?:\.\d+)? : an integer or a float 
    |    : or 
    true   : true 
    |    : or 
    false   : false 
)     : end group 1 
)     : end group 
\b     : word boundary 
.*?     : 0 or more any char 
$     : end of string 
関連する問題