python提取数列数字_从pandas datafram中的列中提取字符串中的数字

只要字符串Incorrect_Price保持您在示例中呈现的结构(数字不是用文字表示的),任务就可以相对容易地解决。在

使用正则表达式,您可以使用similar SO question中的方法提取数字部分和可选的“cent”/“cents”或“dollar”/“dollars”。两个主要的区别是,你要找的是数值和“美分”或“美元”对,而且它们可能不止一次出现。在import re

def extract_number_currency(value):

prices = re.findall('(?P[\d]*[.]?[\d]{1,2})\s*(?Pcent|dollar)s?', value)

result = 0.0

for value, currency in prices:

partial = float(value)

if currency == 'cent':

result += partial / 100

else:

result += partial

return result

print(extract_number_currency('3 dollars and 49 cent'))3.49

现在,您需要将此函数应用于列中所有不正确的值,其中的价格为文字。为了简单起见,我在这里将其应用于所有值(但我相信您将能够处理子集):

^{pr2}$

喂!在

正则表达式的分解'(?P[\d]*[.]?[\d]{1,2})\s*(?Pcent|dollar)s?'

有两个捕获命名为组(?P .... )

第一个捕获组(?P[\d]*[.]?[\d]{1,2})捕获:

[\d]-数字

[\d]*-重复0次或更多次

[.]?-后跟可选(?)点

[\d]{1,2}-后跟一个重复1到2次的数字

\s*-表示0个或更多空白

现在第二个捕捉组要简单得多:(?Pcent|dollar)

cent|dollar-它归结为要捕获的cent和dollar字符串之间的选择

s?是“cents”或“dollars”的可选复数形式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值