从数据框中的字符串中提取浮点值

Extracting Floating Values from A String In A Dataframe

我有以下数据框,df

name         result

AAA           4.5
BBB           UNK
CCC      less than 2.45
DDD     Men > 40: 2.5-3.5

result列的dtypesdtype('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

最聪明的做法是什么?任何建议,将不胜感激。谢谢!

您可以使用 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,请使用 inner 加入,如果您想保留它,请使用 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