小数点以下を含む値と含まない値があるデータから、数値のみを取り出す方法


次のような単位(畳)が入っている面積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

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




以下はどうでしょうか。

[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'
> にマッチします。




以下はどうでしょうか。

[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'
> にマッチします。

