我试图从以数字或小数结尾的字符串中提取数字
df = pd.DataFrame({'Names': ["Absolute Neutrophil Count","Absolute Lymphocyte Count 2.9",
"Absolute Neutrophil Count 10.2","ESR (Modified Westergren) 8",
"Free Triiodothyronine (FT3) 3.59",
"Free Triiodothyronine FT4 4.53"]})
df
Names
0 Absolute Neutrophil Count
1 Absolute Lymphocyte Count 2.9
2 Absolute Neutrophil Count 10.2
3 ESR (Modified Westergren) 8
4 Free Triiodothyronine (FT3) 3.59
5 Free Triiodothyronine FT4 4.53
期望的提取结果:
0 Missing/None
1 2.9
2 10.2
3 8
4 3.59
5 4.53
我尝试了下面的代码,但没有得到预期的结果。
df.iloc[:,0].str.extract(r'^(.*?)\s*(\d\.?\d*)?$') # '\d+\.\d+'
0 1
0 Absolute Neutrophil Count NaN
1 Absolute Lymphocyte Count 2.9
2 Absolute Neutrophil Count 1 0.2
3 ESR (Modified Westergren) 8
4 Free Triiodothyronine (FT3) 3.59
5 Free Triiodothyronine FT4 4.53
请在答案中使用数据框形式的结构,.extract
否则有时这里的答案可以re
起作用strings
,但是当我尝试应用它们时df
,它就变成了别的东西。
以下正则表达式模式似乎在这里起作用:
这与可选的结束整数/小数匹配。更新后的 Pandas 代码如下所示:
以下是对所使用的正则表达式模式的解释:
(
捕获\d+
一个整数(?:\.\d+)?
后跟可选的小数部分)
近距离捕捉$
字符串结尾您使用的正则表达式不会隔离字符串末尾的数字,这就是结果不正确的原因。尝试使用
(\d+(\.\d+)?)(?=\s*$)
提取出现在字符串末尾的十进制或整数。为了解决您的问题,您可以在代码中进行以下更改:
请参阅下图以获得更多说明。
https://isstatic.askoverflow.dev/Qs9JGpfn.png