假设我有咖啡店的菜单单。我想获取文本并返回数量和项目名称
menu = ['Cappuccino','Café Latte','Expresso','Macchiato ','Irish coffee ']
现在,我想从我的菜单中提取匹配的编号和订购项目名称(菜单中的任何第一个匹配项)
示例文本:带1个Capputino
输出数据帧:
text Quantity match
Bring 1 Capputino 1 Cappuccino
不需要输入的文本拼写将与菜单完全相同,所以它只会从“匹配”列中的菜单列表返回匹配模式
我写了下面的代码,但在匹配栏中返回Nan。感谢您的指导
import pandas as pd
import numpy as np
import re
def ccd():
global df
menu = ['Cappuccino','Café Latte','Expresso','Macchiato ','Irish coffee ']
for i in range(len(menu)):
menu[i] = menu[i].upper()
order = input('Enter a substring: ').upper()
args_dict = {'CAPUCINO':'CAPPUCCINO',
"COFFI":"COFFEE",
"COOKI":"COOKIE" }
#order=order.split()
for i,j in enumerate(order):
if j in args_dict:
order[i]=args_dict[j]
df = pd.DataFrame({'text':[order]})
df["Quantity"] = df.text.str.extract('(\d+)')
df['match'] = df.text.str.extract('(' + '|'.join(menu) + ')')
请看以下内容:
order == 'Bring 1 Caputino'
的结果和
order == 'Bring 1 Caxutino'
因为在
menu_map
中没有捕捉'Caxutino'
的模式在我看来这就是你想要的?由于您不希望使用
Replacement
列(我只是为了透明而使用它),因此您可以执行以下操作:(我不明白你想用
for ... if ...
部分实现什么。)编辑:现在我理解了
for ... if ...
部分,我建议以下方法:或:
相关问题 更多 >
编程相关推荐