从数据框中的字符串中提取浮点值
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
列的dtypes
是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
最聪明的做法是什么?任何建议,将不胜感激。谢谢!
您可以使用 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
我有以下数据框,df
:
name result
AAA 4.5
BBB UNK
CCC less than 2.45
DDD Men > 40: 2.5-3.5
result
列的dtypes
是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
最聪明的做法是什么?任何建议,将不胜感激。谢谢!
您可以使用 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