从字符串中提取具有特殊字符的数值,但删除这些字符的其他出现位置

2024-09-30 07:24:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Python和pandas,并且有一个DataFrame列 包含字符串的。我希望将浮点数保留在字符串中,并去掉浮点(字符串)末尾的“-.”。在

到目前为止,我一直在使用下面的正则表达式来去除原始字符串中的字符和方括号,但它将字符串非数字部分中的“-”和“.”保留在原位。在

输入字符串示例: 14,513.045Non-compliant with installation req.

当我试图修改它时,我得到的是: 14,513.045- .(正数字符串示例)

我还希望能够解析负数,例如: -234.670

字符串中的第一个-表示负浮点数。我想保留第一个-和第一个.,但是去掉后面的那些不属于这个数字的那些。在

这是我尝试使用的代码来实现这一点:

dataframe3['single_chainage2'] = dataframe3['single_chainage'].str.replace(r"[a-zA-Z*()]",'')

但我只剩下{}

我看不到单独使用pandas来完成上述操作的方法,并认为regex是推荐的方法。在


Tags: 方法字符串示例dataframepandas数字字符浮点
2条回答

您不需要replace,我想您可以使用Series.str.extract来获得所需的字符串。在

In [1]: import pandas as pd                                                                                                                                     

In [2]: ser = pd.Series(["14,513.045Non-compliant with installation req.", "14,513.045- .", "-234.670"])                                                        

In [3]: pat = r'^(?P<num>-?(\d+,)*\d+(\.\d+)?)'

In [5]: ser.str.extract(pat)['num']                                                                                                                             
Out[5]: 
0    14,513.045
1    14,513.045
2      -234.670
Name: num, dtype: object

regex模式中需要一个命名组(在本例中是num)。在

如果需要将其转换为数字数据类型:

^{pr2}$

不要删除不需要的字符,只需指定一个要查找并提取的模式。它应该不容易出错。 要提取可以是浮点的正数和负数:

import re
number_match = re.search("[+-]?(\d+,?)*(\.\d+)?", 'Your string.')
number = number_match.group(0)

测试以上代码:

^{pr2}$

在这个解决方案中,您不希望执行replace,而只需指定regex匹配的值。在

number_match = re.search("[+-]?(\d+,?)*(\.\d+)?", <YOUR_STRING>)
number = number_match.group(0)
dataframe3['single_chainage2'] = number

我把它分成3行来告诉你它是如何逻辑地进行的。希望这是有道理的。在

您应该将<YOUR_STRING>的值替换为数据的字符串表示形式。至于如何从Pandas数据帧中获取字符串值,this question可能有一些答案。我不确定你的数据帧实际上是什么样子,但我想像df['single_chainage'][0]这样的东西应该可以工作。基本上,如果你在Pandas中建立索引,它会返回一些Pandas特定的信息,如果你只想检索字符串本身,你必须显式地指定它。在

相关问题 更多 >

    热门问题