46952


次のような単位(畳)が入っている面積xから、,単位(畳)を除いた数値の変数spaceを作りたいと考えています。

[code]

    import pandas as pd
    import numpy as np
    df = pd.DataFrame({'x': ['3畳', '4.5畳']})
    
[/code]

次のような正規表現を使った場合には、

[code]

    df["space"] = df["x"].str.extract(r'([0-9]*)畳')
    
[/code]

次のように変換されます。(->は変換後を示します。)  
3畳-> 3  
4.5畳-> 5

小数点以下の場合を考慮した場合には、

[code]

    df["space"] = df["x"].str.extract(r'([0-9]+\.[0-9]*)畳')
    
[/code]

4.5畳のみしか変換されません。  
3畳-> nan  
4.5畳-> 4.5

次のように、変換させた変数spaceを作成したいです。  
3畳-> 3  
4.5畳-> 4.5

どなたか、ご教示頂けるとありがたいです。


CC BY-SA 4.0
2018-07-25T08:51:20.357
46951
2018-07-25T22:54:51.043
20148
question
python 正規表現
小数点以下を含む値と含まない値があるデータから、数値のみを取り出す方法


以下はどうでしょうか。

[code]

    df["space"] = df["x"].str.extract(r'([0-9]+\.?[0-9]*)畳')
    print(df)
    
[/code]

実行結果は以下になります。

[code]

          x space
    0    3畳     3
    1  4.5畳   4.5
    
[/code]

以下は、[正規表現のシンタックス](https://docs.python.jp/3/library/re.html)からの抜粋です。

> `?`  
>  直前にある RE に作用して、 RE を 0 回か 1 回繰り返したものにマッチさせるようにします。例えば ab? は 'a' あるいは'ab'
> にマッチします。


CC BY-SA 4.0
2018-07-25T08:59:01.500
46952
2018-07-25T09:12:56.073
2018-07-25T09:12:56.073
46951
answer


単位を削除したい場合は、`strip()`を使うのが簡単で処理も速いです。

[code]

    df["space"] = df["x"].str.rstrip('畳')   
    
[/code]


CC BY-SA 4.0
2018-07-25T22:54:51.043
46969
2018-07-25T22:54:51.043
15171
46951
answer