我有以下資料框df:
name result
AAA 4.5
BBB UNK
CCC less than 2.45
DDD Men > 40: 2.5-3.5
在dtypes該的result列dtype('O')
我需要提取浮點值并使用特定閾值過濾它們。
我嘗試了以下腳本來提取值并將它們更改為浮動:
df['result'] = df['result'].str.extract(r'(\d .\d )').astype('float')
但是,我不確定我是否得到了正確的輸出,尤其是當該值具有范圍時2.5-3.5。在這種情況下,我想要最大值,i.e. 3.5.
期望的輸出:
name result
AAA 4.5
CCC 2.45
DDD 3.5
最聰明的做法是什么?任何建議,將不勝感激。謝謝!
uj5u.com熱心網友回復:
您可以使用extractall提取所有出現的浮點數,然后max僅使用最大值。
>>> ext = (df.result.str.extractall(r'(\d .\d )')
.astype(float)
.unstack()
.max(axis=1))
>>> ext
0 4.50
2 2.45
3 3.50
接下來,您可以將其連接回原始資料框。ext當前是一個系列,因此在使用to_frame. 如果您想洗掉 NaN,請使用innerjoin,如果您想保留它,請使用left(默認)。
>>> df = df[['name']].join(ext.to_frame('result'), how='inner')
>>> df
name result
0 AAA 4.50
2 CCC 2.45
3 DDD 3.50
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/381639.html
上一篇:基于模式C#提取字串的一部分
下一篇:同步兩個String物件
